ELK日志文件分析系统基本部署

ELK概述

​ ELK是elasticsearch、Logstashh和Kibana三个系统的首字母组合。当我们部署集群服务器的时候,日志文件就会散落在多台服务器上。查看日志信息就需要到各个服务器上去取和查看,我们把这些日志文件归集到一个地方统一管理。

Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。

Logstash是一个完全开源的工具,他可以对你的日志进行收集、过滤,并将其存储供以后使用(如,搜索)。

Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。

ELK日志文件分析系统基本部署(纯实战)_第1张图片

实验前期准备

名称 角色 地址
centos 7-1 node1+kibana 192.168.142.221
centos 7-2 node1 192.168.142.132
centos 7-3 Logstash+web 192.168.142.136

这里我将WEB端与日志文件系统安装在了,各位可以根据个人情况,全部独立出去。(虚拟机开太多了,电脑顶不住啊)

实验步骤

一、部署Elasticsearch服务

注意:两个节点操作相同

添加域名解析。方便后期使用

[root@node1 ~]# vim /etc/hosts
//添加
192.168.142.221 node1
192.168.142.132 node2

检查JAVA版本(没有安装的可以使用yum install java进行安装)

[root@node1 ~]# java -version
openjdk version "1.8.0_131"
OpenJDK Runtime Environment (build 1.8.0_131-b12)
OpenJDK 64-Bit Server VM (build 25.131-b12, mixed mode)

部署elasticsearch服务(端口号:9200)

//部署elasticsearch服务
[root@node1 ~]# rpm -ivh elasticsearch-5.5.0.rpm

//加载系统服务
[root@node1 ~]# systemctl daemon-reload
[root@node1 ~]# systemctl enable elasticsearch.service

修改ES配置文件

[root@node1 ~]# vim /etc/elasticsearch/elasticssearch.yml
//以下几行取消注释
17/ cluster.name: my-elk-eluster           //集群名字(所有节点必须一样)
23/ node.name: node1            //节点名字(每个节点不同)
33/ path.data:/data/elk_data          //数据存放路径
37/ path.logs:/var/log/elasticsearch/          //日志存放路径
43/ bootstrap.memorylock: false                //不在启动的时候锁定内存
55/ network.host: 0.0.0.0                         //提供服务绑定的IP地址,0. 0. 0. 0代表所有地址
59/ http.port: 9200                  //侦听端口为9200
68/ discovery.zen.ping.unicast.hosts: ["node1", "node2"]               //集群发现通过单播实现

建立数据文件存放目录,并开启服务

[root@node1 ~]# mkdir -p /data/elk_data
[root@node1 ~]# chown -R elasticsearch:elasticsearch /data/elk_data     //修改属主属组
[root@node1 ~]# systemctl start elasticsearch.service
[root@node1 ~]# netstat -atnp | grep 9200

验证服务是否开启

使用宿主机浏览器访问:http://192.168.142.132:9200,即可获取到相应的节点信息,如下:

{
"name" : "node1",
"cluster_name" : "my-elk-cluster",
"cluster_uuid" : "mi3-z72CRqS-ofc4NhjXdQ",
"version" : {
"number" : "5.5.0",
"build_hash" : "260387d",
"build_date" : "2017-06-30T23:16:05.735Z",
"build_snapshot" : false,
"lucene_version" : "6.6.0"
},
"tagline" : "You Know, for Search"
}

二、安装管理插件elasticsearch-head(端口:9100)

注意:两个节点操作相同

解压并编译安装

[root@node1 ~]# yum install gcc gcc-c++ make -y

//安装node组件包
[root@node1 ~]# tar zxf node-v8.2.1.tar.gz -C /opt
//在node目录中
[root@node1 ~]# ./configure
[root@node1 ~]# make              //异常费时,大概耗时20min
[root@node1 ~]# make install

安装phantomjs前端框架

[root@node1 ~]# tar jxf phantomjs-2.1.1-linux-x86_64.tar.bz2 -C /usr/local/src
[root@node1 ~]# cp /usr/local/src/phantomjs-2.1.1-linux-x86_64/bin/phantomjs /usr/local/bin

安装elasticsearch-head数据可视化工具

[root@node1 ~]# tar zxf elasticsearch-head.tar.gz -C /usr/local/src 
//在elasticsearch-head目录中
[root@node1 ~]# npm install          //使用npm工具进行安装(node组件自带)

修改elasticsearch-head配置文件

[root@node1 ~]# vim /etc/elasticsearch/elasticsearch.yml
//末行添加
http.cors.enabled: true            //开启跨域访问支持
http.cors.allow-origin: "*"            //跨域访问允许的域名地址,*号为全网段

开启elasticsearch-head工具

[root@node1 ~]# systemctl restart elasticsearch            //重启ES服务
[root@node1 ~]# cd /usr/local/src/elasticsearch-head/
[root@node1 elasticsearch-head]# npm run start &         //保持后台运行

三、安装Logstash日志收集系统

安装WEB服务

任意web服务均可(Apache、nginx、Tomcat均可),不再进行详细解释。

这里使用的Apache服务

安装logstash系统

[root@apache ~]# rpm -ivh logstash-5.5.1.rpm
[root@apache ~]# systemctl start logstash.service         //启动logstash
[root@apache ~]# systemctl enable logstash.service      //设置为开机自启
[root@apache ~]# ln -s /usr/share/logstash/bin/logstash /usr/local/bin     //建立软链接方便使用

设置logstash与elasticsearch进行对接

​ logstash配置文件由三部分组成:input(入)、output(出)、filter

[root@apache log]# chmod o+r messages 
[root@apache log]# ll /var/log/messages 
-rw----r--. 1 root root 483737 Dec 18 17:54 /var/log/messages

[root@apache log]# vim /etc/logstash/conf.d/system.conf
//手动添加
input {
        file{
          path => "/var/log/messages"                  //收集日志的路径
          type => "system"                //便签名称
          start_position => "beginning"               //收集方式,"beginning"从头开始
          }
        }
output {
        elasticsearch {
          hosts => ["192.168.142.136:9200"]             //es服务地址
          index => "system-%{+YYYY.MM.dd}"             //索引名称
          }
        }

[root@apache log]# systemctl restart logstash.service    //重启服务

结果验证

ELK日志文件分析系统基本部署(纯实战)_第2张图片

四、logstash基本使用方法(与本次实验大体上无关,不爱看的朋友可以直接跳过)

Logstash命令测试

字段描述解释:

-f 通过这个选项可以指定logstash的配置文件,根据配置文件配置logstash

-e 后面跟着字符串该字符串可以被当做logstash的配置 (如果是””,则默认使用stdin做为输入、stdout作为输出)

-t 测试配置文件是否正确,然后退出

1、输入、输出均为标准模式
[root@apache ~]# logstash -e 'input { stdin{} },output { stdout{} }'
##输入直接输出在屏幕上
输入:www.baidu.com
输出:apache www.baidu.com

2、使用codec解码器,使用rubydebug显示详细输出
[root@apache ~]# logstash -e 'input { stdin{} },output { stdout { codec=>rubydebug } }'
##会按照编码格式进行输出
输入:www.baidu.com
输出:
{
"@timestamp"=> 2018-10-12T02: 15:39.136Z, #时间
"@version=> "1", #版本
"host" => "apache", #使用Apache服务
"message" => "www.baidu. com" #访问网页
}

3、将信息写入elasticsearch中
[root@apache ~]# logstash -e 'input { stdin{} },output {elasticsearch { hosts=>["192.168.142.221:9200"] } }'
##会在elasticsearch中生成索引
输入:www.baidu.com
输出:在elasticsearch中生成lostash-2019.12.17

五、安装Kibana可视化工具(端口:5601)

在node1中进行安装

[root@node1 ~]# cd /abc/elk/
[root@node1 elk]# rpm -ivh kibana-5.5.1-x86_64.rpm 
[root@node1 kibana]# cp kibana.yml kibana.yml.bak

修改Kibana配置文件

[root@node1 kibana]# vim kibana.yml
//按照下图进行修改
2/ server.port: 5601                 //打开端口
7/ server.host: "0.0.0.0"                    //监听的地址
21/ elasticsearch.url: "http://192.168.142.136:9200"      //与elasticsearch建立联系
30/ kibana.index: ".kibana"                  //在elasticsearch中添加.kibana索引

启动Kibana

[root@node1 kibana]# systemctl start kibana.service         //开启kibana服务
[root@node1 kibana]# systemctl enable kibana.service       //设为开机自启动

web服务与elasticsearch进行对接后,使用kibana进行可视化

[root@apache log]# cd /etc/logstash/conf.d/
//修改配置文件(空的自行添加)
[root@apache conf.d]# vim apache_log.conf
input {
        file{
          path => "/etc/httpd/logs/access_log"                //针对于Apache的access日志
          type => "access"
          start_position => "beginning"
          }
        file{
          path => "/etc/httpd/logs/error_log"                 //针对于Apache的error日志
          type => "error"
          start_position => "beginning"
          }
        }
output {
        if [type] == "access" {
        elasticsearch {
          hosts => ["192.168.142.136:9200"]                    //elasticsearch地址
          index => "apache_access-%{+YYYY.MM.dd}"
          }
        }
        if [type] == "error" {
        elasticsearch {
          hosts => ["192.168.142.136:9200"]                      //elasticsearch地址
          index => "apache_error-%{+YYYY.MM.dd}"
          }
        }
        }

[root@apache conf.d]# /usr/share/logstash/bin/logstash -f apache_log.conf          //仅对于该日志文件进行生效

在可视化界面进行配置

在浏览器输入http://192.168.142.136:5601/
首次登录时创建一个索引(对接系统日志文件):
输入:access-*

点击create按钮进行创建

ELK日志文件分析系统基本部署(纯实战)_第3张图片

点击Discover按钮,会发现access-*信息

ELK日志文件分析系统基本部署(纯实战)_第4张图片

六、安装过程中可能遇到的问题

故障集:

19:43:59.210 [LogStash::Runner] FATAL logstash.runner - Logstash could not be started because there is already another instance using the configured data directory.  
If you wish to run multiple instances, you must change the "path.data" setting.

解决方案

//查看logstash配置文件
    vim /etc/logstash/logstash.yml
//找到path.data路径
    /var/lib/logstash/
//删除缓存
    rm -rf .lock
//带路径重启
    logstash -f /etc/logstash/conf.d/nginx_log.conf --path.data=/var/lib/logstash

感谢阅读~ ~ ~