ELK简介
最近有个需求搭建一套日志系统用于集成几个业务系统的日志提供快速的检索功能,目前是用Log4net存数据库+Error级别发邮件方式,也算简单暴力好用,但历史日志的模糊查询确实很慢,所以使用ELK是比较理想的解决方案。三年前写过两篇文章log4net.NoSql +ElasticSearch 实现日志记录和log4net.redis+logstash+kibana+elasticsearch+redis 实现日志系统,感觉有点凌乱,这次借着项目需要重新整理一下。参考ELK不权威指南可以对ELK做个大体了解它的应用场景和优缺点,总之“ELK 三个字母分别是三个软件产品的缩写。 E代表Elasticsearch,负责日志的存储和检索; L代表Logstash, 负责日志的收集,过滤和格式化;K代表Kibana,负责日志的展示统计和数据可视化。”。以前常见的ELK架构如下:
现在官方的推荐架构是https://www.elastic.co/cn/products
就像知乎上说的Elasticsearch是ELK的核心, L和K都有相应的替代方案(日记采集可以不使用Logstash,而是直接使用log4net.nosql输出到ES,或者像我那样自己写个log4net.redis输出到redis),所以先从Elasticsearch开始。
环境说明
1. windows server 2012 R2 64位
2. jdk-8u131-windows-x64.exe
3. elasticsearch-5.4.0.zip
Elasticsearch 安装
1. 下载Elasticsearch
打开官网 https://www.elastic.co/downloads/elasticsearch ,目前最新版本是5.4.3,下载Zip格式文件,解压到E:\elk\elasticsearch,路径不要包括中文。
2. 从命令行运行Elasticsearch
命令行下到bin目录,运行elasticsearch.bat,出现如下界面表示服务起来了(不代表成功)。
在IE浏览器里输入 http://localhost:9200,弹出一个json文件下载内容如下表示成功了:
{ "name" : "KaeR6Q2", "cluster_name" : "elasticsearch", "cluster_uuid" : "S4uOl5YERqaq1NBk9wId-g", "version" : { "number" : "5.4.0", "build_hash" : "780f8c4", "build_date" : "2017-04-28T17:43:27.229Z", "build_snapshot" : false, "lucene_version" : "6.5.0" }, "tagline" : "You Know, for Search" }
按ctrl+c停止服务。
如果输入 http://localhost:9200 报错,使用netstat -anp tcp 还可以看到9200、9300端口都在监听了,那么就看一下命令行输出里是否有乱码,如下图:
在E:\elk\elasticsearch\logs\elasticsearch.log里可以看到日志
[2017-07-05T17:48:07,373][INFO ][o.e.n.Node ] [] initializing ...
[2017-07-05T17:48:07,811][INFO ][o.e.e.NodeEnvironment ] [KaeR6Q2] using [1] data paths, mounts [[新加卷 (E:)]], net usable_space [98.2gb], net total_space [99.9gb], spins? [unknown], types [NTFS]
[2017-07-05T17:48:07,826][INFO ][o.e.e.NodeEnvironment ] [KaeR6Q2] heap size [1.9gb], compressed ordinary object pointers [true]
右键查看磁盘属性把卷标“新加卷”去掉就可以了。
3. 配置Elasticsearch
Elasticsearch从config\elasticsearch.yml文件加载默认配置,也可以在命令行里用-E前缀指定,比如:
elasticsearch.bat -Ecluster.name=myCluster -Enode.name=myNode
访问http://localhost:9200,返回值:
{ "name" : "myNode", "cluster_name" : "myCluster", "cluster_uuid" : "S4uOl5YERqaq1NBk9wId-g", "version" : { "number" : "5.4.0", "build_hash" : "780f8c4", "build_date" : "2017-04-28T17:43:27.229Z", "build_snapshot" : false, "lucene_version" : "6.5.0" }, "tagline" : "You Know, for Search" }
修改elasticsearch.yml文件实现配置,格式说明Configuring Elasticsearch,
# Use a descriptive name for your cluster: # cluster.name: esLogCluster # Use a descriptive name for the node: # node.name: esLogNode_175 # Set the bind address to a specific IP (IPv4 or IPv6): # network.host: 192.168.5.175
再次运行elasticsearch.bat,就可以使用ip地址远程访问了。
4. 安装Elasticsearch服务elasticsearch-master
elasticsearch可以后台服务的方式运行,通过elasticsearch-service.bat脚本安装、卸载、启动、停止、管理服务,参数说明如下:
install
|
Install Elasticsearch as a service |
remove
|
Remove the installed Elasticsearch service (and stop the service if started) |
start
|
Start the Elasticsearch service (if installed) |
stop
|
Stop the Elasticsearch service (if started) |
manager
|
Start a GUI for managing the installed service |
参数后面可以跟一个可选参数 service_id,用于指定服务名称,默认的名称是 elasticsearch-service-x64,安装服务:
elasticsearch-service install elasticsearch-master
配置服务:
elasticsearch-service manager elasticsearch-master
注意修改启动类型为自启动,java初始内存(默认是2G)可以调小一些。
5. 安装Elasticsearch服务elasticsearch-slave,组成单服务器多节点集群
a.复制E:\elk\elasticsearch文件夹重命名为E:\elk\elasticsearch-slave
b.删除E:\elk\elasticsearch-slave\data文件夹下的内容,切记一定要删除
c.修改E:\elk\elasticsearch-slave\config\elasticsearch.yml文件
node.name: esLogNode_175_slave node.master: false discovery.zen.ping.unicast.hosts: ["192.168.5.175"]
d.安装服务
elasticsearch-service install elasticsearch-slave
e.验证集群,输入http://192.168.5.175:9200/_cluster/health?pretty,number_of_nodes和number_of_data_nodes等于2表示成功。
{ "cluster_name" : "esLogCluster", "status" : "green", "timed_out" : false, "number_of_nodes" : 2, "number_of_data_nodes" : 2, "active_primary_shards" : 0, "active_shards" : 0, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
踩坑总结
1. 磁盘卷标是中文,端口监听了通过http://localhost:9200访问失败
2. 组建集群时复制elasticsearch文件夹没有清空data里的内容,出现错误“found existing node {node-1}{vP19PMOyT2ilJKRAqgn78w}{jDULCExERXGHp4VXpbyuJA}{127.0.0.1}{127.0.0.1:9300} with the same id but is a different node instance]”
参考链接
1.Install Elasticsearch on Windows,官方文档
2.ElasticSearch 5学习(1)——安装Elasticsearch、Kibana和X-Pack Linux环境教程
3.ELK不权威指南
4.ELK介绍
6.Elk 进阶部署