一,ELK是什么?
ELK是一套针对日志数据做解决方案的框架,分别代表了三款产品: - E: ElasticSearch(ES),负责日志的存储和检索; - L:Logstash,负责日志的收集,过滤和格式化; - K:Kibana,负责日志的展示统计和数据可视化;
ElasticSearch
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Logstash
Logstash是一个用于管理日志和事件的工具,你可以用它去收集日志、转换日志、解析日志并将他们作为数据提供给其它模块调用,例如搜索、存储等。
Kibana
Kibana是一个优秀的前端日志展示框架,它可以非常详细的将日志转化为各种图表,为用户提供强大的数据可视化支持。
二,ELK可以做什么:
应用出现故障,需要通过日志排查故障信息。当应用已部署了多个环境时,这时排查的难度和耗时就是一个巨大的损耗。而ELK就可以对多个环境的日志进行收集,过滤,存储,检错,可视化。届时你只需要查看kibana上的日志信息,就可以找出故障所在。
针对应用在生产环境上的表现需要数据支撑,如访客数,功能调用量,出错率等等。此类数据的收集,当然可以通过使用别的产品或编写一套程序进行输出,是有其一定的效果。但能像ELK这样对应用无入侵,且功能强大的开源软件。那是少之又少了。
三,ELK一般用来做啥?
ELK组件在海量日志系统的运维中,可用于解决:
分布式日志数据集中式查询和管理
系统监控,包含系统硬件和应用各个组件的监控
故障排查
安全信息和事件管理
报表功能
ELK组件在大数据运维系统中,主要可解决的问题如下:
日志查询,问题排查,上线检查
服务器监控,应用监控,错误报警,Bug管理
性能分析,用户行为分析,安全漏洞分析,时间管理
四,ELK日志分析的构成:
1.elasticsearch的基础概念:
接近实时(NRT),群集(cluster),节点(node),索引(index),分片或副本(shards & replicas)。
2.logstash的主要组件:
shipper:日志收集者。
lndexer:日志存储者。
broker:日志Hub
Search and Storage:允许对事件进行搜索和存储
web interface:基于web的展示界面
3.kibana的主要功能:
Elasticsearch无缝之集成,整合数据,复杂数据分析,让更多团队成员收益,接口灵活,配置简单,可视化多数据源,简单数据导出。
一,配置Elasticsearch软件
注:两台节点配置相同,在配置elasticsearch配置文件中注意服务器名称不要相同,群集名称要相同,才可以实现群集效果。
准备环境:在两台ELK节点上配置域名解析,通过本地/etc/hosts文件实现。
[root@node1 ~]# hostname node1 [root@node1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.2.1 node1 192.168.2.2 node2
检查Java环境
[root@node1 ~]# java -version openjdk version "1.8.0_102" OpenJDK Runtime Environment (build 1.8.0_102-b14) OpenJDK 64-Bit Server VM (build 25.102-b14, mixed mode)
部署elasticsearch软件
[root@node1 ~]# rpm -ihv /mnt/elasticsearch-5.5.0.rpm 警告:/mnt/elasticsearch-5.5.0.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY 准备中... ################################# [100%]
加载系统服务
[root@node1 ~]# systemctl daemon-reload [root@node1 ~]# systemctl enable elasticsearch.service Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service. [root@node1 ~]#
加载系统服务
[root@node1 ~]# systemctl daemon-reload [root@node1 ~]# systemctl enable elasticsearch.service Created symlink from /etc/systemd/system/multi-user.target.wants/elasticsearch.service to /usr/lib/systemd/system/elasticsearch.service. [root@node1 ~]#
创建数据存放数据并授权
1. [root@node1 ~]# mkdir -p /data/elk_data/ 2. [root@node1 ~]# chown elasticsearch:elasticsearch /data/elk_data/
更改elasticsearch主配置文件
[root@localhost ~]# vim /etc/elasticsearch/elasticsearch.yml cluster.name: my-elk-cluster node.name: node1 path.data: /data/elk_data path.logs: /var/log/elasticsearch bootstrap.memory_lock: false network.host: 0.0.0.0 http.port: 9200 discovery.zen.ping.unicast.hosts: ["node1", "node2"]
启动elasticsearch并查看是否成功开启
[root@node1 ~]# systemctl start elasticsearch.service [root@node1 ~]# netstat -anpt | grep 9200 tcp6 0 0 :::9200 :::* LISTEN 4297/java
查看节点信息
二,安装Elasticsearch-head插件
编译安装node,编译安装node耗时较长,大约40min,根据机械的配置可能有所不同,请耐心等待。
[root@node1 ~]# tar zxf /mnt/node-v8.2.1.tar.gz -C /usr/src/ [root@node1 ~]# cd /usr/src/node-v8.2.1/ [root@node1 node-v8.2.1]# ./configure && make && make install
安装phantomjs
[root@node1 ~]# cd /usr/local/src/ [root@node1 src]# tar jxf /mnt/phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@node1 src]# cd phantomjs-2.1.1-linux-x86_64/bin/ [root@node1 bin]# cp phantomjs /usr/local/bin/
安装Elasticsearch-head
[root@node1 bin]# cd [root@node1 ~]# cd /usr/local/src/ [root@node1 src]# tar zxf /mnt/elasticsearch-head.tar.gz [root@node1 src]# cd elasticsearch-head/ [root@node1 elasticsearch-head]# npm install
修改Elasticsearch配置文件
[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml http.cors.enabled: true http.cors.allow-origin: "*" [root@node1 ~]# systemctl restart elasticsearch
启动服务
[root@node1 elasticsearch-head]# npm run start & [root@node1 elasticsearch-head]# netstat -lnupt | grep 9100 tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 50396/grunt [root@node1 elasticsearch-head]# netstat -lnupt | grep 9200 tcp6 0 0 :::9200 :::* LISTEN 50023/java
通过elasticsearch-head查看elasticsearch信息。通过浏览器访问http://192.168.2.1:9100/,并连接群集
插入索引。通过命令插入一个测试索引,通过输出信息可以看到索引为index-demo,类型为test。
[root@node1 elasticsearch-head]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'Content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
查看效果
二,logstash安装及使用方法
注:logstash一般部署在需要监控其日志的服务器中,在本案例中,logstash部署在Apache服务器上,用于收集Apache服务器的日志信息并发送到Elasticsearch中。在正式部署之前,在Node1上部署Logstash,以熟悉logstash的使用方法。logstash也需要Java环境,所以安装之前也要检查当前机器的Java环境是否存在。
在node1上安装logstash
[root@node1 ~]# rpm -ihv /mnt/logstash-5.5.1.rpm 警告:/mnt/logstash-5.5.1.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:logstash-1:5.5.1-1 ################################# [100%]) Using provided startup.options file: /etc/logstash/startup.options Successfully created system startup script for Logstash [root@node1 ~]# systemctl start logstash.service [root@node1 ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/
测试logstash
logstash命令行中常用的命令选项如下:
-f:通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
-e:后面跟着字符串,该字符串可以被当做lgostash配置(如果是“ ”,则默认使用stdin作为输入,stdout作为输出)。
-t:测试配置文件是否正确,然后退出。
[root@node1 ~]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.2.1:9200"] } }' www.baidu.com www.sina.com www.google.com
查看logstash新增的索引
logstash配置文件
1. input { 2. 3. fliter {...} 4. 5. } 6. output {...} 7.
下来修改logstash配置文件,让其收集系统日志/vcar/log/messages,并将其输出到elasticsearch中。
[root@node1 src]# chmod o+r /var/log/messages [root@node1 src]# ll /var/log/messages -rw----r--. 1 root root 107359 9月 2 03:23 /var/log/messages [root@node1 ~]# vim /etc/logstash/conf.d/system.conf input { file { path => "/var/log/messages" type => "system" start_position => "beginning" } } output { elasticsearch { hosts => ["192.168.2.1:9200"] index => "system-%{+YYYY.MM.dd}" } } ~ [root@node1 src]# systemctl restart logstash
三,安装Kibana
在node1服务器上安装Kibana,并设置开机启动
[root@node1 ~]# cd /usr/local/src/ [root@node1 src]# rpm -ihv /mnt/kibana-5.5.1-x86_64.rpm 警告:/mnt/kibana-5.5.1-x86_64.rpm: 头V4 RSA/SHA512 Signature, 密钥 ID d88e42b4: NOKEY 准备中... ################################# [100%] 正在升级/安装... 1:kibana-5.5.1-1 ################################# [100%]) [root@node1 src]# systemctl enable kibana.service Created symlink from /etc/systemd/system/multi-user.target.wants/kibana.service to /etc/systemd/system/kibana.service.
设置kibana的主配置文件/etc/kibana/kibana.yml\
[root@node1 src]# vim /etc/kibana/kibana.yml server.port: 5601 server.host: "0.0.0.0" elasticsearch.url: "http://localhost:9200" bana.index: ".kibana"
启动kibana服务
[root@node1 src]# systemctl start kibana.service
验证kibana,通过浏览器访问http://192.168.2.1:5601,第一次登录需要添加一个elasticsearch索引,添加前面创建索引system-*。
单击“Discover”按钮查看图标信息及日志信息,可以分类显示,使鼠标指针悬停在“Available Fields”中的“host”,然后点击“add”按钮,可以看到按照“host”筛选后的结果。
将apache服务器的日志添加到Elasticsearch并通过Kibana显示。
1. [root@node1 src]# yum -y install httpd 2. [root@node1 ~]# systemctl start httpd
在logstash配置文件apache_log.conf
[root@node1 ~]# cd /etc/logstash/conf.d/ [root@node1 conf.d]# vim apache_log.conf input { file { path => "/etc/httpd/logs/access_log" type => "access" start_position => "beginning" } file { path => "/etc/httpd/logs/error_log" type => "error" start_position => "beginning" } } output { if [type] == "access" { elasticsearch { hosts => ["192.168.2.1:9200"] index => "apache_access-%{+YYYY.MM.dd}" } } if [type] == "error" { elasticsearch { hosts => ["192.168.2.1:9200"] index => "apache_error-%{+YYYY.MM.dd}" } } }
激活配置文件
/usr/share/logstash/bin/logstash -f apache_log.conf
登录Kibana,单击“ Create index Pattern ”
添加“ apache_access ”,并单击Create按钮。
查看apache_access日志
添加“ apache_error ”,并单击Create按钮。
查看 apache_error 日志文件