ELK日志分析系统 搭建

日志分析是运维工程师解决系统故障,发现问题的主要手段。日志主要包括系统日志、应用程序日志和安全日志。系统运维和开发人员可以通过日志了解服务器软硬件信息、检查配置过程中的错误及错误发生的原因。经常分析日志可以了解服务器的负荷,性能安全性,从而及时采取措施纠正错误。通常,日志被分散的储存在不同的设备上。如果管理上百台服务器,你还在使用依次登录每台机器的传统方法查阅日志,即繁琐又效率低下。为此,我们可以使用集中化的日志管理,如:开源的syslog,将所有服务器上的日志收集汇总。集中化管理日志后,日志的统计和检索又成为一件比较麻烦的事情,一般我们使用grep、awk和wc等Linux命令能实现检索和统计,但是对于更高要求的查询、排序和统计等,再加上庞大的机器数量,依然有点力不从心。

ELK日志分析

开源实时日志分析ELK能够解决上述问题,官方网站:https://www.elastic.co/products
ELK由ElasticSearch、Logstash和Kiabana三个开源工具组成
Elasticsearch是个开源分布式搜索引擎, 基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是第二流行的企业搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

Elasticsearch群集,共同持有整个的数据,并一起提供索引和搜索功能。其中一个节点为主节点,这个主节点是可以通过选举产生的,并提供跨节点的联合索引和搜索的功能。集群有一个唯一性标示的名字,默认是elasticsearch,集群名字很重要,每个节点是基于集群名字加入到其集群中的。因此,确保在不同环境中使用不同的集群名字。一个集群可以只有一个节点。强烈建议在配置elasticsearch时,配置成集群模式。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、过滤,并将其存储,供以后使用(如搜索)。
Kibana 是一个针对Elasticsearch的开源分析及可视化平台,用来搜索、查看交互存储在Elasticsearch索引中的数据。使用Kibana,可以通过各种图表进行高级数据分析及展示。Kibana让海量数据更容易理解。它操作简单,基于浏览器的用户界面可以快速创建仪表板(dashboard)实时显示Elasticsearch查询动态。设置Kibana非常简单。无需编写代码,几分钟内就可以完成Kibana安装并启动Elasticsearch索引监测。

Logstash收集AppServer产生的Log,并存放到ElasticSearch集群中,而Kibana则从ES集群中查询数据生成图表,再返回给Browser。
简单来说,进行日志处理分析,一般需要经过以下几个步骤:
1.将日志进行集中化管理(beats)
2.将日志格式化(logstash)
3.对格式化后的数据进行索引和存储(elasticsearch)
4.前端数据的展示(kibana)

配置和安装ELK日志分析系统,采用安装集群方式~2个elasticsearch节点,并监控apache服务器日志

操作系统 主机名 IP地址 主要软件
Centos7.6 node1 192.168.188.41 Elasticsearch Kibana
Centos7.6 node2 192.168.188.42 Elasticsearch
Centos7.6 apache 192.168.188.43 Logstash Apache

ELK日志分析系统 操作步骤

1:配置 Elasticsearch 群集(node1、node2)

Elasticsearch 群集中 有两个节点:node1和 node2,两个节点配置基本相同
(配置文件中的节点名称不同,一个node1 一个node2)
为省时间,node1 node2两节点同步操作
(1)配置主机名,安装java环境

# hostnamectl set-hostname node1       --另一台node节点,主机名设置为node2
# vi /etc/hosts
末行插入:
192.168.188.41   node1
192.168.188.42   node2

# yum -y install java-1.8.0
# java -version					--查看java环境是否安装

在这里插入图片描述
在这里插入图片描述
(2)部署 elasticsearch软件
用Xftp把elasticsearch-5.5.0.rpm包上传到两个节点的/opt目录下,也可用其他方式,如samba共享挂载

# cd /opt
# rpm -ivh elasticsearch-5.5.0.rpm 

(3)更改elasticsearch主配置文件
注意:配置文件中两个节点的名字不同,一个是node1一个是node2

# cp /etc/elasticsearch/elasticsearch.yml /etc/elasticsearch/elasticsearch.yml.bak
# vi /etc/elasticsearch/elasticsearch.yml
修改,#号去掉
cluster.name: my-elk-cluster                  --集群名字
node.name: node1                              --节点名字(另一台node节点名字是node2)
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"]   --集群发现通过单播实现

#  grep -v "^#" /etc/elasticsearch/elasticsearch.yml	过滤查看配置

在这里插入图片描述
在这里插入图片描述

(4)创建数据存放路径 并授权,并加载系统服务

# mkdir -p /data/elk_data   	创建数据存放路径
# chown elasticsearch:elasticsearch /data/elk_data/

# systemctl daemon-reload    	加载系统服务

(5)启动elasticsearch ,并查看是否成功开启

# systemctl start elasticsearch.service
# systemctl enable elasticsearch.service
# netstat -antp |grep 9200
tcp6       0      0 :::9200          :::*          LISTEN      64463/java 

在这里插入图片描述
在这里插入图片描述

(6)查看节点信息
用浏览器打开 http://192.168.188.41:9200 ,可看到node1节点的信息
用浏览器打开 http://192.168.188.42:9200 ,可看到node2节点的信息
在这里插入图片描述
在这里插入图片描述
(7)检查集群健康状况
浏览器打开 http://192.168.188.41:9200/_cluster/health?pretty
浏览器打开 http://192.168.188.42:9200/_cluster/health?pretty
在这里插入图片描述
在这里插入图片描述
(8)检查集群状态
浏览器打开 http://192.168.188.41:9200/_cluster/state?pretty

在这里插入图片描述
上述查看集群的方式,及其不方便,我们可以通过安装elasticsearch-head插件后,来管理集群
(9)编译安装node组件依赖包
上传node-v8.2.1.tar.gz到 node1、node2两节点的/opt目录下

# yum install gcc gcc-c++ make pcre pcre-devel -y
# cd /opt
# tar xzvf node-v8.2.1.tar.gz
# cd node-v8.2.1/
# ./configure 
# make -j3
# make install

(10)安装phantomjs
把phantomjs软件包上传到/usr/local/src/

# cd /usr/local/src/
# tar xjvf phantomjs-2.1.1-linux-x86_64.tar.bz2
# cd phantomjs-2.1.1-linux-x86_64/bin
# cp phantomjs /usr/local/bin

(11)安装elasticsearch-head插件
把elasticsearch-head软件包上传到/usr/local/src/

# cd /usr/local/src/
# tar xzvf elasticsearch-head.tar.gz
# cd elasticsearch-head/
# npm install

在这里插入图片描述
在这里插入图片描述
(12)修改主配置文件

# vi /etc/elasticsearch/elasticsearch.yml   
末行插入
http.cors.enabled: true
http.cors.allow-origin: "*"

# systemctl restart elasticsearch		重启 elasticsearch服务

(13)启动elasticsearch-head 服务器

# cd /usr/local/src/elasticsearch-head/
# npm run start &      --切换到后台运行  

在这里插入图片描述
在这里插入图片描述

# netstat -lnupt |grep 9100
tcp        0      0 0.0.0.0:9100       0.0.0.0:*        LISTEN      114739/grunt     
# netstat -lnupt |grep 9200
tcp6       0      0 :::9200                 :::*              LISTEN      114626/java   

在这里插入图片描述
在这里插入图片描述

打开浏览器输入http://192.168.188.41:9100/
在Elasticsearch 后面的栏目中输入:http://192.168.188.41:9200,点连接
可以友好的查看节点信息

打开浏览器输入http://192.168.188.42:9100/
在Elasticsearch 后面的栏目中输入http://192.168.188.42:9200,点连接
可以友好的查看节点信息
在这里插入图片描述

登录192.168.188.41 node1主机:
索引为index-demo,类型为test,可以看到成功创建

# curl -XPUT 'localhost:9200/index-demo/test/1?pretty&pretty' -H 'content-Type: application/json' -d '{"user":"zhangsan","mesg":"hello world"}'

在这里插入图片描述
打开浏览器输入http://192.168.188.41:9100/ 查看索引信息

点击数据浏览–会发现在node1上创建的索引为index-demo,类型为test, 相关的信息

2:安装 Logstash、apache服务

(IP: 192.168.188.43)
(1)安装apache,java环境包

关闭防火墙及核心防护,更改主机名
# systemctl stop firewalld
# setenforce 0
# hostnamectl set-hostname apache
安装Apahce服务
# yum -y install httpd
# systemctl start httpd
安装Java环境
# yum -y install java-1.8.0
# java -version 

(2)安装logstash,并启动服务
上传logstash-5.5.1.rpm到/opt目录下

# cd /opt
# rpm -ivh logstash-5.5.1.rpm                   --安装logstash
# systemctl start logstash.service              --启动logstash
# systemctl enable logstash.service
# ln -s /usr/share/logstash/bin/logstash /usr/local/bin   --建立logstash软连接

检验 logstash(Apache)与elasticsearch(node)功能是否正常,做对接测试。

(3)输入采用标准输入 输出采用标准输出

# logstash -e 'input { stdin{} } output { stdout{} }'
省略........
10:08:54.060 [[main]-pipeline-manager] INFO  logstash.pipeline - Pipeline main started
2018-10-12T02:08:54.116Z apache 
10:08:54.164 [Api Webserver] INFO  logstash.agent - Successfully started Logstash API endpoint {:port=>9600}
www.baidu.com                 --需要输入www.baidu.com
2018-10-12T02:10:11.313Z apache www.baidu.com
www.sina.com.cn               --需要输入www.sina.com.cn
2018-10-12T02:10:29.778Z apache www.sina.com.cn

(4)使用logstash将信息写入elasticsearch中
输入 输出 对接

# logstash -e 'input { stdin{} } output { elasticsearch { hosts=>["192.168.188.41: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               --输入内容

在这里插入图片描述

(5)做对接配置
Logstash配置文件主要由三部分组成:input、output、filter(根据需要)

# chmod o+r /var/log/messages
# ll /var/log/messages
# vi /etc/logstash/conf.d/system.conf 
input {
       file{
        path => "/var/log/messages"
        type => "system"
        start_position => "beginning"
        }
      }
output {
        elasticsearch {
          hosts => ["192.168.188.41:9200"]
          index => "system-%{+YYYY.MM.dd}"
          }
        }

# systemctl restart logstash.service

打开浏览器 输入http://192.168.188.41:9100/ 可以看到刚刚设置的索引信息
多出 system-2019.04.16

在这里插入图片描述

3:在node1上 安装kibana

上传kibana-5.5.1-x86_64.rpm 到/usr/local/src目录

# cd /usr/local/src/
# rpm -ivh kibana-5.5.1-x86_64.rpm
# cd /etc/kibana/
# cp kibana.yml kibana.yml.bak
# vi kibana.yml
server.port: 5601                --kibana打开的端口
server.host: "0.0.0.0"           --kibana侦听的地址
elasticsearch.url: "http://192.168.188.41:9200"  --和elasticsearch建立联系
kibana.index: ".kibana"              --在elasticsearch中添加.kibana索引

# systemctl start kibana.service    --启动kibana服务
# systemctl enable kibana.service   --开机启动kibana服务

使用浏览器输入192.168.188.41:5601
首次登录创建一个索引 名字:system-* 这是对接系统日志文件
在这里插入图片描述

然后点最左上角的Discover按钮 会发现system-*信息
在这里插入图片描述

然后点下面的host旁边的add 会发现右面的图只有 Time 和host 选项了 这个比较友好
在这里插入图片描述

4:对接Apache主机的日志文件

# cd /etc/logstash/conf.d/
# touch apache_log.conf
# 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.188.41:9200"]
          index => "apache_access-%{+YYYY.MM.dd}"
          }
        }
        if [type] == "error" {
        elasticsearch {
          hosts => ["192.168.188.41:9200"]
          index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
        }

# /usr/share/logstash/bin/logstash -f apache_log.conf

打开浏览器输入http://192.168.188.43,打开httpd网页。会记入访问日志文件中
打开浏览器 输入http://192.168.188.41:9100/ 查看索引信息
能发现apache_error-2020.3.25 apache_access-2020.3.25
在这里插入图片描述

打开浏览器 输入http://192.168.188.41:5601
点击左下角有个management选项—index patterns—create index pattern
----分别创建apache_error-* 和 apache_access-* 的索引
在这里插入图片描述

发布了56 篇原创文章 · 获赞 6 · 访问量 1851

猜你喜欢

转载自blog.csdn.net/weixin_45691464/article/details/105097006