赞
踩
日志分析是运维工程师解决系统故障、发现问题的主要手段。日志包含多种类型,包括程序日志、系统日志以及安全日志等。通过对日志的分析,既可以做到未雨绸缪、预防故障的发生,又可以在故障发生时,寻找蛛丝马迹、快速定位故障点。管理员也可以通过体制了解到服务器的软件信息、硬件信息、服务器负荷以及安全性相关的信息,如服务器是否被攻击、磁盘空间是否即将耗尽、内存是否严重不足等。通过这些分析,管理员可以及时采取措施。通常情况下,每台服务器或者客户端都会产生日志,相对而言,服务器日志更加重要,因为它存放着企业的重要数据,同时作为服务器提供者,一旦出现问题,将影响所有客户端的使用。一些大型的机房或者数据中心一般不会给服务器配置显示设备,而逐台远程登录设备查看日志,需要每次系统认证成功后执行,且效率低下。
普遍的做法就是日志的集中管理,既将所有服务器的日志集中发送到到日志服务器中,如开源的Syslog。好处是可以集中查看所有服务器的日志,减轻了工作量,从安全性的角度来看,这种集中日志管理可以有效查询以及跟踪服务器日志被攻击的行为,因为黑客入侵的一瞬间,一些安全日志已经被发送到日志服务器。比如银行的监控系统,窃贼一旦发现监控设备,及时立即破坏这些设备也于事无补,因为监控画面早已经发送至监控服务器器中。采用集中化管理日志,也存在一些不足,如针对日志的分析以及查找将变得十分困难,对日志的逐条检查虽然可以获取有价值的信息,但是工作量十分庞大,像Apache这样的Web网站每天都有可能产生上万条日志。Linux虽然提供了文字编辑类的工具命令(如grep、awk、wc等),可以快速定位已知关键字的日志内容,却无法快速定位未知错误日志。当面对更高要求的查询、排序、统计以及数据分析时,加之庞大的机器数量。这些工具难免力不从心。开源实时日志分析系统——ELK应运而生。
ELK主要由三个开源工具组成:
Elasticsearch:是个开源分布实时分析搜索引擎,建立在全文搜索引擎库Apache Lucens基础上,同时隐藏了Apache Luces的复杂性。Elasticsearch将所有的功能打包成一个独立的服务,并提供了一个简单的RESTful API接口,它具有分布式、零配置、自动发现、索引自动分片、索引副本机制、RESTful风格接口、多数据源、自动搜索负载等特点;
Logstash:是一个完全开源的工具,主要用于日志收集,同时可以对数据处理,并输出到Elasticsearch;
Kibana:也是一个开源和免费的工具,Kibana可以为Logstash和Elasticsearch提供图形化的日志分析Web界面,可以汇总、分析和搜索重要数据日志;
Elasticsearch是一个基于Lucene的搜索服务器,它稳定、可靠、快速,而且具有比较好的水平扩展能力、为分布式环境设计、在云计算中被广泛应用。Elasticsearch提供了一个分布式多用户能力的全文搜索引擎,基于RESTful Web接口。通过该接口,用户可以通过浏览器和Elasticsearch通信。Elasticsearch使用Java开发的,并作为Apache许可条款下的开放源码分布。Wikipedia、Stack、Overflow、GitHub等基于Elasticsearch来构建搜索引擎,所以具有实时搜索、稳定、可靠、快速、安装使用方便等特点。
配置elasticsearch环境
[root@node1 ~]# hostnamectl set-hostname node1 #更改主机名 [root@node2 ~]# hostnamectl set-hostname node2 [root@node1 ~]# vi /etc/hosts 192.168.100.131 node1 192.168.100.132 node2 #安装编译包 [root@node1 ~]# yum -y install gcc-c++ gcc make pcre [root@node1 ~]# yum install -y java-1.8.0 [root@node1 ~]# java -version openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode)
部署elasticsearch软件
1、安装elasticsearch—rpm包 上传elasticsearch-5.5.0.rpm到/opt目录下 [root@node1 ~]# cd /opt [root@node1 opt]# rpm -ivh elasticsearch-5.5.0.rpm 2、加载系统服务 [root@node1 opt]# systemctl daemon-reload [root@node1 opt]# systemctl enable elasticsearch.service 3、更改elasticsearch主配置文件 [root@node1 opt]# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak #备份配置文件,以防出错无法恢复 [root@node1 opt]# vi /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 ####提供服务绑定的IP地址,0.0.0.0代表所有地址 http.port: 9200 ####侦听端口为9200 discovery.zen.ping.unicast.hosts: ["node1", "node2"] ####集群发现通过单播实现 [root@node1 opt]# grep -v "^#" /etc/elasticsearch/elasticsearch.yml
4、创建数据存放路径并授权
[root@node1 opt]# mkdir -p /data/elk_data
[root@node1 opt]# chown elasticsearch:elasticsearch /data/elk_data/
5、启动elasticsearch是否成功开启
[root@node1 elasticsearch]# systemctl daemon-reload #修改了配置文件,要重新加载
[root@node1 elasticsearch]# systemctl start elasticsearch.service
[root@node1 opt]# netstat -antp | grep 9200
tcp6 0 0 :::9200 :::* LISTEN 7124/java
分别访问
192.168.100.131 node1
192.168.100.132 node2
检查集群信息
在真机浏览器192.168.100.1 打开 http://192.168.100.131:9200/_cluster/health?pretty
检查群集状态信息
输入http://192.168.100.131:9200/_cluster/state?pretty
安装elasticsearch-head插件
//上传node-v8.2.1.tar.gz到/opt 编译安装node组件依赖包,耗时比较长,大约30分钟。 [root@localhost opt]# cd /opt [root@node1 opt]# tar xzvf node-v8.2.1.tar.gz [root@node1 opt]# cd node-v8.2.1/ [root@node1 node-v8.2.1]# ./configure [root@node1 node-v8.2.1]# make -j3 #j3参数指多线程编译,编译速度会大大提高 [root@node1 node-v8.2.1]# make install // 安装phantomjs 上传软件包到/usr/local/src/ [root@localhost node-v8.2.1]# cd /usr/local/src/ [root@localhost src]# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2 [root@localhost src]# cd phantomjs-2.1.1-linux-x86_64/bin [root@localhost bin]# cp phantomjs /usr/local/bin ###安装elasticsearch-head### [root@localhost bin]# cd /usr/local/src/ [root@localhost src]# tar xzvf elasticsearch-head.tar.gz [root@localhost src]# cd elasticsearch-head/ [root@localhost elasticsearch-head]# npm install
设置 elasticsearch 跨域访问
[root@localhost ~]# cd ~
[root@localhost ~]# vi /etc/elasticsearch/elasticsearch.yml ####下面配置文件,插末尾##
http.cors.enabled: true
http.cors.allow-origin: "*"
[root@localhost ~]# systemctl restart elasticsearch
//启动elasticsearch-head 服务器
[root@localhost ~]# cd /usr/local/src/elasticsearch-head/
[root@localhost elasticsearch-head]# npm run start & ####切换到后台运行
[root@localhost elasticsearch-head]# netstat -lnupt |grep 9100
tcp 0 0 0.0.0.0:9100 0.0.0.0:* LISTEN 114739/grunt
[root@localhost elasticsearch-head]# netstat -lnupt |grep 9200
tcp6 0 0 :::9200 :::* LISTEN 114626/java
使用elasticsearch-head
[root@node1 ~]# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'
安装Apahce、logstash
1、安装Apahce服务(httpd) [root@apache ~]# yum -y install httpd [root@apache ~]# systemctl start httpd 2、安装Java环境 [root@apache ~]# java -version ###如果没有装,安装yum -y install java-1.8.0 openjdk version "1.8.0_181" OpenJDK Runtime Environment (build 1.8.0_181-b13) OpenJDK 64-Bit Server VM (build 25.181-b13, mixed mode) 3、安装logstash 上传logstash-5.5.1.rpm到/opt目录下 [root@apache ~]# cd /opt [root@apache opt]# rpm -ivh logstash-5.5.1.rpm ##安装logstash [root@apache opt]# systemctl start logstash.service ##启动logstash [root@apache opt]# systemctl enable logstash.service [root@apache opt]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin/ ##建立logstash软连接
logstash与elasticsearch对接
使用 logstash 命令测试 logstash 和 elasticsearch 是否功能正常,完成对接
字段描述解释:
● -f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash
● -e 后面跟着字符串 该字符串可以被当做logstash的配置(如果是” ”,则默认使用stdin做为输入、stdout作为输出)
● -t 测试配置文件是否正确,然后退出
//使用logstash将信息写入elasticsearch中输入 输出 对接
[root@apache opt]# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.100.131:9200"] } }'
。。。。。。。。省略。。。。。。。
The stdin plugin is now waiting for input:
10:40:06.558 [Api Webserver] INFO logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com ###输入内容
www.sina.com.cn ###输入内容
www.google.com.cn ###输入内容
【登录192.168.100.133 Apache主机 做对接配置】 Logstash配置文件主要由三部分组成:input、output、filter(根据需要) [root@apache opt]# chmod o+r /var/log/messages #给其他用户一个只读权限 [root@apache opt]# ll /var/log/messages -rw----r--. 1 root root 572555 4月 16 23:50 /var/log/messages [root@apache opt]# vi /etc/logstash/conf.d/system.conf input { file{ path => "/var/log/messages" type => "system" start_position => "beginning" } } output { elasticsearch { hosts => ["192.168.100.131:9200"] index => "system-%{+YYYY.MM.dd}" } } [root@apache opt]# systemctl restart logstash.service
在node1主机安装kibana
上传kibana-5.5.1-x86_64.rpm 到/usr/local/src目录
[root@node1 ~]# cd /usr/local/src/
[root@node1 src]# rpm -ivh kibana-5.5.1-x86_64.rpm
[root@node1 src]# cd /etc/kibana/
[root@node1 kibana]# cp kibana.yml kibana.yml.bak
[root@node1 kibana]# vi kibana.yml
server.port: 5601 #### kibana打开的端口
server.host: "0.0.0.0" ####kibana侦听的地址
elasticsearch.url: "http://192.168.100.131:9200" ###和elasticsearch建立联系
kibana.index: ".kibana" ####在elasticsearch中添加.kibana索引
[root@node1 kibana]# systemctl start kibana.service ###启动kibana服务
[root@node1 kibana]# systemctl enable kibana.service ###开机启动kibana服务
对接Apache主机的Apache 日志文件
[root@apache opt]# cd /etc/logstash/conf.d/ [root@apache conf.d]# touch apache_log.conf [root@apache conf.d]# vi 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.100.131:9200"] index => "apache_access-%{+YYYY.MM.dd}" } } if [type] == "error" { elasticsearch { hosts => ["192.168.100.131:9200"] index => "apache_error-%{+YYYY.MM.dd}" } } } [root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。