筹建ELK日志系统
步骤:
一、下载ELK的三大组件
Elasticsearch下载地址: https://www.elastic.co/downloads/elasticsearch
Logstash下载地址: https://www.elastic.co/downloads/logstash
Kibana下载地址: https://www.elastic.co/downloads/kibana
下载后将其解压到某个目录即可.
注:这3个组件相互之间的关系及作用如下:
Logstash(收集服务器上的日志文件) --》然后保存到 ElasticSearch(搜索引擎) --》Kibana提供友好的web界面(从ElasticSearch读取数据进行展示)
二、安装elasticsearch
2.1 启动elasticsearch
进入elasticsearch目录\bin
./elasticsearch
顺利的话,启动成功后,在浏览器里输入http://localhost:9200/ 应该能看到类似下面的输出:
{ "name" : "Shi'ar Gladiator", "cluster_name" : "elasticsearch", "version" : { "number" : "2.3.2", "build_hash" : "b9e4a6acad4008027e4038f6abed7f7dba346f94", "build_timestamp" : "2016-04-21T16:03:47Z", "build_snapshot" : false, "lucene_version" : "5.5.0" }, "tagline" : "You Know, for Search" }
2.2 安装kopf插件
先按Ctrl+C停止elasticsearch,接下来准备安装插件,elasticsearch有大量插件资源,用于增加其功能,bin目录下,输入
./plugin list 可以查看当前安装的插件列表,我们刚刚全新安装,输出的是一个空列表,继续输入
./plugin install mobz/elasticsearch-head
安装完成后,再次用./plugin list确认下:
Installed plugins in /Users/liaomengge/ELK/elasticsearch-2.3.2/plugins: - head - kopf
如果输出上述类似,表明head安装成功。
然后重启elasticsearch,浏览器里输入http://localhost:9200/_plugin/head/,将会看到类似下面的界面
以上操作都ok后,建议Ctrl+C关掉,改用nohup ./elasticsearch & 将其做为后台进程运行,以免退出。
三、logstash的启动与配置
说明:
- 多个独立的agent(Shipper)负责收集不同来源的数据,一个中心agent(Indexer)负责汇总和分析数据,在中心agent前的Broker(使用redis实现)作为缓冲区,中心agent后的ElasticSearch用于存储和搜索数据,前端的Kibana提供丰富的图表展示
- Shipper表示日志收集,使用LogStash收集各种来源的日志数据,可以是系统日志、文件、redis、mq等等
- Broker作为远程agent与中心agent之间的缓冲区,使用redis实现,一是可以提高系统的性能,二是可以提高系统的可靠性,当中心agent提取数据失败时,数据保存在redis中,而不至于丢失
- 中心agent也是LogStash,从Broker中提取数据,可以执行相关的分析和处理(Filter)
进入logstash的bin目录下
mkdir conf
vi conf/logstash-indexer.conf
内容如下:
input { file { path => ["/Users/liaomengge/ELK/log/error.log"] type => "log-error" } log4j { mode => "server" host => "127.0.0.1" port => "8066" type => "log4j" } redis { host => "127.0.0.1" port => "6379" data_type =>"list" key => "logstash:redis" codec => "json" type => "redis-input" } } output { elasticsearch { hosts => ["localhost:9200"] } stdout { codec => rubydebug } }
以上配置了3中方式:
1) file
2) log4j
表示通过Apache的log4j记录
3) redis
将日志数据先通过redis缓存容器,减轻大量日志写入的请求
此处有个隐患:当redis以RDB方式进行持久化时,可能存在宕机情况,导致部分数据丢失,故可以考虑使用kafka做缓存容器
上面的type,是指定如下图中类型的:
Logstash中的其他字段可以参考https://www.elastic.co/guide/en/logstash/current/plugins-inputs-log4j.html
3.2 启动
继续保持在logstash的bin目录下,输入
./logstash -f conf/logstash-indexer.conf
稍等片刻,如果看到Logstash startup completed,则表示启动成功[注:此时的elasticsearch必须启动]。然后另开一个终端窗口,向redis中写入一些东西,比如`hello world`,然后保存。观察logstash的终端运行窗口,是否有东西输出,如果有以下类似输出:
{ "message" => "hello, world", "tags" => [ [0] "_jsonparsefailure" ], "@version" => "1", "@timestamp" => "2016-04-30T10:07:38.881Z", "type" => "redis-input" }
说明logstash工作正常,此时浏览http://localhost:9200/_plugin/head/ 可以看到如下数据:
四、kibana的配置及启动
4.1 修改配置文件
进入到kibana/config,下有一个配置文件kibana.yml,改成下面这样:
server.port: 5601 server.host: “127.0.0.1” elasticsearch.url: http://127.0.0.1:9200 kibana.index: “.kibana”
即:指定elasticsearch的访问位置,ip以及端口
4.2 启动
进入kibana/bin 下,输入:
./kibana
启动完成后,在浏览器里输入http://localhost:5601/ 即可看到kibana界面,首次运行,会提示创建index,可以直接点击Create按钮或者以前面我们设置的`type`作为索引即可。
然后,就能看到类似下面的界面了:
github: https://github.com/liaomengge/elk-demo
参考文章:
http://www.cnblogs.com/yjmyzz/p/ELK-install-tutorial.html
http://www.open-open.com/lib/view/open1451801542042.html
https://www.elastic.co/products
http://www.cnblogs.com/yjf512/p/4199105.html
http://kibana.logstash.es/content/