ELK日志解决方案安装配置与使用
官方网站:https://www.elastic.co/products/elasticsearch
logstash,elasticsearch,kibana作用如下:
logstash:分布在每一台需要采集数据的节点上,需要一个配置文件来获取数据,输入主要支持file,输出支持gangalia,nagios,kafka,elasticsearch.
而且可以简单地配置,就可以把数据结构化,过滤等。功能和flume类似。
elasticsearch:基于lucene的一个数据存储,索引工具,高可用,全文检索,全开源。有自己的api可以方便调用。
kibana是前端展现工具,使用nodejs开发。可以创建index,然后绘图,检索,根据标签进行过滤等功能。
安装非常简单,下载解压后执行相应的命令即可。
logstash -e 'input { stdin { } } output { stdout {} }'
/bin/elasticsearch
bin/kibana
以下是我使用elk来搭建一个环境,用来捕获取hadoop的主要进程日志的过程。
input { file { type =>"hadoop" path => ["/app/cdh26550/logs/hadoop-student-namenode-nn1.log" ] # path=>"/app/elk/logstash-2.1.1/test.log" start_position => "beginning" } } filter { multiline { pattern => "^\d{4}-\d{2}-\d{2}" negate => true what => "previous" } grok { match => { "message" => "(?<Date>\d{4}-\d{2}-\d{2}\s+\d{2}.\d{2}.\d{2}.\d{3})\s+(?<Level>\S+)\s+(?<ClassName>\S+)\s+(?<Text>.*)"} } date { match => [ "Date", "yyyy-MM-dd HH:mm:ss,SSS" ] } } output { elasticsearch { hosts => "localhost" index =>"hadoop-%{+YYYY.MM.DD}" } stdout { codec => rubydebug } }
关于插件的使用,建议去官网查看相关的文档,非常详细,非常不错。
logstash配置文件中有一点需要注意,在向elasticsearch传送数据的过程中,指定了一个index,这个名字可以理解为一个表,存储在elasticsearch中。配置成了按天生成,可以理解成按天划分的分区表。
这个对后面kibana创建索引是对应的,理解了这个,在创建kibana的index时就容易多了。kibana创建index需要和这个保持一致,才能正确的收到数据,否则会有问题。
kibana应该是根据前台过滤的条件,生成query 发送到elasticsearch,然后根据返回的值重绘页面。
logstash的状态文件默认存储在用户的home目录,存储了扫描文件的offset等信息,
sincedb_eaee9f121b74fda7013e1e9fee2e0a01是以.开头的隐藏文件,如下
.sincedb_eaee9f121b74fda7013e1e9fee2e0a01