搜索内容

13.ELK stack分析Ansible和Zabbix日志

13.ELK stack分析Ansible和Zabbix日志

ELK stack是Elasticsearch,Logstash和Kibana三个开源项目的首字母缩写,这三个核心工具通常协同工作,和大家熟知的LAMP stack,MEAN stack的命名类似,故称为ELK Stack,当然目前ELK还有不少其他组件可用,如常用的Beats*,Filebeat及winlogbeat等,本章主要聚集于ELK stack三大核心组件,下面就分别来认识一下它们吧。

◆Elasticsearch是实时全文搜索和分析引擎,主要具有搜集,分析和存储数据这三大功能,构建于Apache Lucene搜索引擎库之上,同时也是是ELK stack中最为知名和重要的工具。

2019年9月,Elasticsearch在数据库权威排行榜DB-enginee名列第8位,是一个被广泛使用的全文搜索引擎,企业一般用它来实现数据索引和搜索功能,DB-enginee网址具体地址如下:
https://db-engines.com/en/ranking

ELK stack的官方介绍地址如下:
https://www.elastic.co/what-is/elk-stack

◆Logstash是一个用来搜集和分析日志的工具,支持几乎任何类型的日志,包括系统日志,错误日志及各种自定义日志等,并可从许多来源接收日志,这些来源包括syslog,消息队列等,并能以多种方式输出数据;
◆Kibana则是一个是构建于Elasticsearch之上,并可提供数据查询及数据可视化等功能,帮助用户更好地实现数据理解的开源项目,具体说来,Kibana可以搜索,查看,交互存放在Elasticsearch索引里的数据,使用各种不同的图表,地图等实现高级数据分析与可视化,简而言之,Kibana就是将数据可视化。

了解了ELK stack是什么之后,ELK stack的三大组件既可以单独使用,也可以一起工作,不过更多的时候,它们是在一起工作,采用JSON格式存储数据,下面废话就不多说,直接来掌握其ELK stack的安装,配置和使用。

13.1.单节点部署和配置ELK stack

首先访问如下官方地址获得ELK stack对操作系统的支持信息:
https://www.elastic.co/support/matrix

    13.1.1. 部署Java环境

安装ELK stack之前,首先要部署Java环境,ELK的官方文档推荐使用JDK8,具体操作如下:

dnf install -y java-1.8.0-openjdk

运行如下命令检测JDK 8是否安装成功:

java -version
openjdk version "1.8.0_222"
OpenJDK Runtime Environment (build 1.8.0_222-b10)
OpenJDK 64-Bit Server VM (build 25.222-b10, mixed mode)

Tips:如何安装Oracle的Java环境?
首先彻底卸载当前系统的OpenJDK,具体操作如下:

dnf remove java-1.8.0-openjdk -y

随后从Oracle官方下载安装包,下载地址如下:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

选中“Accept License Agreement”后单击jdk-8u221-linux-x64.rpm下载并上传到服务器,随后运行如下命令进行安装:

rpm -ivh jdk-8u221-linux-x64.rpm

最后使用如下命令检测Java环境变量是否生效:

java -version
java version "1.8.0_221"
Java(TM) SE Runtime Environment (build 1.8.0_221-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.221-b11, mixed mode)

看到如上内容说明Oracle Java已成功部署,需要注意的是,无论是OpenJDK,还是Oracle JDK,版本必须是JDK8。

    13.1.2.ELK下载和安装

安装好了Java,就可以开始部署ELK了,至于版本,这里选择稳定版本6.2.4,以普通用户henry登录并执行如下命令获得Elasticsearch二进制安装包:

sudo mkdir /usr/local/elk                               #由于ELK stack不能以超级用户执行,故要将其目录的属主及属组修改为普通用户
sudo chown henry.henry -R /usr/local/elk
cd /usr/local/elk

随后下载相应的软件包,具体操作如下:

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.8.3.tar.gz
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.8.3-linux-x86_64.tar.gz
wget https://artifacts.elastic.co/downloads/logstash/logstash-6.8.3.tar.gz

解压解包
运行如下命令进行解压解包:

tar zxvf elasticsearch-6.8.3.tar.gz
mv elasticsearch-6.8.3/ elasticsearch

tar zxvf logstash-6.8.3.tar.gz
mv logstash-6.8.3 logstash

tar zxvf kibana-6.8.3-linux-x86_64.tar.gz
mv kibana-6.8.3-linux-x86_64 kibana

成功解压后,/usr/local/elk目录内容如下:

ls -F |grep "/$"
elasticsearch/
kibana/
logstash/

配置运行ELK stack
◆配置Elasticsearch

cd elasticsearch
mkdir data

编辑器打开Elasticsearch的主配置文件:

vi config/elasticsearch.yml

修改如下内容:

...
node.name: node-1                                       #取消node.name注释,可自定义名称,此处为了简单,采用默认名称
path.data: /usr/local/elk/elasticsearch/data            #设置Elasticsearch的数据和日志目录
path.logs: /usr/local/elk/elasticsearch/logs
network.host: 0.0.0.0                                   #配置可以访问Elasticsearch的IP地址,默认为127.0.0.1,0.0.0.0表示所有主机

最后为了顺利启动,可以根据需要在文件的末尾添加如下几个配置:
bootstrap.memory_lock: false
bootstrap.system_call_filter: false
http.cors.enabled: true
http.cors.allow-origin: "*"

保存退出后,还需一个极为重要的配置,关键操作如下:

sudo vi /etc/systemd/system.conf

定位到如下关键词:
#DefaultLimitNOFILE=
#DefaultLimitNPROC=
#DefaultLimitMEMLOCK=

取消注释并将其值修改为65536:
DefaultLimitNOFILE=65536
DefaultLimitNPROC=65536
DefaultLimitMEMLOCK=infinity

保存退出后重启系统,一定要重启,否则上述配置不生效。此外,为了避免可能的报错,还需配置如下文件:

sudo vi /etc/sysctl.conf

追加如下内容:
...
vm.max_map_count=655360
fs.file-max=655360

运行如下命令立即生效:
sudo sysctl -p

13.2. 运行和使用ELK stack

    13.2.1 运行ELK stack

◆运行Elasticsearch
上述全部参数生效,万事俱备,只欠东风了,运行如下命令后台启动Elasticsearch:

/usr/local/elk/elasticsearch/bin/elasticsearch &            #后台运行,-d参数也可以在后台运行

或:
nohup /usr/local/elk/elasticsearch/bin/elasticsearch &> elasticsearch.log &

运行后,可运行如下命令查看其进程:

ps -ef | grep elasticsearch

如需查看Elasticsearch的日志,可以使用如下命令:

tail -f elasticsearch.log       

最直观的验证方法从浏览器获得,需要先停掉防火墙服务:

sudo systemctl stop firewalld
sudo systemctl disable firewalld

然后在浏览器中访问如下地址,具体操作如下:

curl http://192.168.1.168:9200

应该可以看到如下内容:
{
  "name" : "node-1",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "AnVC_t_eS6WJhHSeYh9eUA",
  "version" : {
    "number" : "6.8.3",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "0c48c0e",
    "build_date" : "2019-08-29T19:05:24.312154Z",
    "build_snapshot" : false,
    "lucene_version" : "7.7.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

看到上述信息,说明ELK stack中最重要的组件启动成功了,需要注意的是,由于Elasticsearch基于Java开发,故需要很大的内存,运行ELK stack内存越大越好,如果条件有限,如虚拟机运行且内存小于4GB,也是可以运行的,不过需要通过如下命令启动Elasticsearch:

ES_JAVA_OPTS="-Xmas512m -Xmas512m" ./bin/elasticsearch -d       #配置Java虚拟机的最大和最新内存

此外,再次提醒大家的是,ELK全部成员都要以普通用户身份运行,切记不要使用超级用户执行。

◆配置Logstash
配置Logstash主要是配置Logstash收集数据的方式,即配置其input和output,用于数据搜集,具体方法如下:

cd /usr/local/elk/logstash

然后运行如下命令创建输入输出文件:

vi config/test.conf

内容如下:
input{
        file {
            path => ["/tmp/test_data"]
            codec => json {
                charset => "UTF-8"
                }
            }
        }

    output{
        elasticsearch{
            hosts => "127.0.0.1"
            index => "logstash-%{+YYYY.MM.dd}"
            document_type => "test"
        }
    }

◆运行Logstash

./bin/logstash -f config/test.conf

或:
nohup ./bin/logstash -f config/test.conf &> logstash.log &

如需查看logstash的日志,可以使用如下命令:
tail -f logstash.log

◆配置Kibana
Kibana的配置相对比较简单,具体操作如下:

vi /usr/local/elk/kibana/config/kibana.yml

配置如下内容:
server.host: "0.0.0.0"

如果elasticsearch与kibana安装在不同服务器上,需要手动指定地址
elasticsearch.url: "http://0.0.0.0:9200"

◆运行Kibana
cd /usr/local/elk/kibana
./bin/kibana &

或:
nohup ./bin/kibana &> kibana.log &

成功运行Kibana后,可在浏览器中访问http://192.168.1.168:5601访问Kibana界面,如图13-1所示。

图13-1 Kibana的Web界面

如需查看Kibana的日志,可以使用如下命令:

tail -f kibana.log

首先需要了解Kibana数据处理的流程,即从数据源(脚本创建的随机数据或Ansible/Zabbix/各种网络服务的日志)导入到Kibana,并利用其强大的数据查询和分析功能对导入的数据进行查询分析,最后生成直观的图表,ELK stack数据搜集,处理和显示如下图13-2所示。

图13-2 ELK stack各个组件的功能(图片来源:https://medium.com)

    13.2.2. 使用和测试ELK stack

为了实现数据采集功能,需要重新配置Logstash,具体操作如下:

cd /usr/local/elk/logstash
vi config/test.conf

更新后内容如下:
input{
        tcp {
            port => 11223
            codec => json {
                charset => "UTF-8"
                }
            }
        }

    output{
        elasticsearch{
            hosts => "127.0.0.1"
            index => "logstash-%{+YYYY.MM.dd}"
            document_type => "test"
        }
    }

然后重启LogStash,其侦听11223端口,成功重启后,就可以将关注转移到数据上了,先要准备数据,使用Python脚本创建一些随机数据并运行Python脚本,具体操作如下:

python3.6 test_data.py

需要说明的是,由于CentOS 8的Python升级到了3.6,故下列Python脚本的版本均为3.6版本。成功导入数据后效果如图13-3所示。

图13-3 Python脚本成功导入数据

上述脚本所生成的数据的格式为JSON格式,包含字符串和数字,成功创建完测试数据,即可开始数据查询,通过浏览器访问Kibana的Web界面,选择左侧主菜单Management > Index Patterns选项,首先单击右上角的indices按钮,并输入logstash,出现名称为logstash-*数据文件,这就是由Python脚本所生成的数据,单击Next step按钮,在弹出的下拉列表中选择@timestamp选项,最后单击右侧的Create index pattern按钮,这样就可以在Index Patterns页面中看到Python脚本随机生成的大量数据,说明数据导入成功,可以看到大量分类和数据,这样就可以开始进行数据查询及各种分析了。

要通过Kibana查询数据,直接通过姓名port作为关键字来搜索,可以看到所有含有port的相关信息,具体效果如图13-4所示。

图13-4 搜索port关键字

了解了Kibana的数据的导入和分析,可以发现,数据导入的关键就是数据导入脚本,上述脚本是生成随机数据的Python脚本,如果将上述脚本换为搜集Ansible日志的脚本或是Zabbix日志的脚本,即可完成相应的数据导入,具体操作如下:

python3.6 collect_ansible_log.py ./ansible_log.log
python3.6 collect_zabbix_log.py ./zabbix_log.log

然后根据上述方法导入Kibana进行数据查询和分析,只不过在创建图表时根据自己的需求灵活选择选项,这样就可以对Ansible/Zabbix或各种网络服务的日志进行分析了,从日志中获得更多规律,更大的价值。

本章小结
本章主要帮助大家掌握了ELK stack这个大数据分析利器的部署和配置,并演示了导入数据及相关的简单操作,部署和配置好了ELK stac就可以进行各种数据查询及分析了,更近一步还可以根据分析结果变成直观的图表,但这已经超出了本文的范围,如需更多了解ELK stack的使用方法,请参阅其官方文档。

EOF

本章所示用ELK安装文件及相关脚本可从网盘14章文件夹下载:
链接:https://pan.baidu.com/s/1QXsTJCgsqqfdqqk2KFFK-w
提取码:086p

备用下载地址:https://www.123pan.com/s/DaeA-oCnWh.html

提取码:AEdZ

扩展阅读
Install ELK stack on CentOS 7 to centralize logs analytics
http://devopspy.com/devops/install-elk-stack-centos-7-logs-analytics/

ELK Stack Tutorial: Learn Elasticsearch, Logstash, and Kibana
https://www.guru99.com/elk-stack-tutorial.html

What is the ELK Stack?
https://www.elastic.co/what-is/elk-stack

参考文档
https://www.elastic.co/guide/index.html
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/index.html
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/zip-targz.html
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/setup.html
https://www.elastic.co/guide/en/elasticsearch/reference/6.8/install-elasticsearch.html
https://github.com/elastic/ansible-elasticsearch

版权声明:
作者:WaterBear
链接:https://l-t.top/2633.html
来源:雷霆运维
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭
目 录