ELK介绍
什么是 ELK Stack?
很简单,指的就是 Elastic Stack。
那么,ELK 到底是什么呢? “ELK”是三个开源项目的首字母缩写,这三个项目分别是:Elasticsearch、Logstash 和 Kibana。Elasticsearch 是一个搜索和分析引擎。Logstash 是服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到诸如 Elasticsearch 等“存储库”中。Kibana 则可以让用户在 Elasticsearch 中使用图形和图表对数据进行可视化。
Elastic Stack 是 ELK Stack 的更新换代产品。
ElasticSearch:是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java开发的,并作为Apache许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。
Logstash:是一个具有实时渠道能力的数据收集引擎,主要用于日志的收集与解析,并将其存入 ElasticSearch中。与ElasticSearch有很高的适配性。
Kibana:是一款基于 Apache 开源协议,使用 JavaScript 语言编写,为 Elasticsearch提供分析和可视化的 Web 平台。它可以在 Elasticsearch 的索引中查找,交互数据,并生成各种维度的表图。
官方网站:
https://www.elastic.co/cn/
elastic-stack产品官网:
https://www.elastic.co/cn/elastic-stack
官方演示地址:
https://demo.elastic.co/
工作流程:
在需要收集日志的所有服务上部署logstash,作为logstash agent(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到Redis,然后logstash indexer将日志收集在一起交给全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana 来结合自定义搜索进行页面展示。
环境:
因为我是做实验,所以只用了一台服务器,系统为 CentOS 7.8
,在服务器上安装 elasticsearch-7.7.1、kibana-7.7.1、logstash-7.7.1。
服务器:192.168.118.133
配置基础环境(全部安装)
1、关闭防火墙和seliunx
# systemctl stop firewalld && systemctl disable firewalld
# sed -i 's/=enforcing/=disabled/g' /etc/selinux/config && setenforce 0
2、设置打开文件数
vim /etc/security/limits.conf
* soft nofile 65536 * hard nofile 65536 * soft nproc 32000 * hard nproc 32000 |
vim /etc/sysctl.conf
vm.max_map_count=655360 #单个vm进程最大线程数量为改值的一半左右 |
执行以下命令使变动立即生效:
sysctl -p
安装配置jdk
[root@elk-175 ~]# yum install java-1.8.0-openjdk.x86_64 -y
[root@elk-175 ~]# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
更新时间:
yum install ntpdate -y
ntpdate time1.aliyun.com
ES安装部署
官网地址:
https://www.elastic.co/cn/elasticsearch/
https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html
ES官方安装教程:
https://www.elastic.co/guide/en/elasticsearch/reference/7.7/rpm.html
Import the Elasticsearch PGP Key
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Installing from the RPM repository
vim /etc/yum.repos.d/elasticsearch.repo
Download and install the RPM manually
配置 elasticsearch.yml如下:
[root@localhost ~]# cat /etc/elasticsearch/elasticsearch.yml | grep "^[a-z]"
node.name: node-133 path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch network.host: 192.168.118.133 http.port: 9200 bootstrap.memory_lock: true http.cors.enabled: true |
ES启动注意事项:
1、对于 network.host: 192.168.118.133 配置项
如果启动在127.0.0.1网卡的话,可以正常启动
ES要跨主机访问,需要监听在真实网卡上
监听真实网卡需要调整系统参数才能正常启动,否则不可以
ES监听在非 127.0.0.1 网卡上,如监听在 0.0.0.0 或 真实网卡地址上时,需要调整的系统参数有:
(1)、修改最大文件打开数
vim /etc/security/limits.conf * soft nofile 65536 * hard nofile 65536 * soft nproc 32000 * hard nproc 32000 |
(2)、修改最大打开进程数
vim /etc/security/limits.d/20-nproc.conf * soft nproc 4096 |
(3)、内核参数调整
vim /etc/sysctl.conf vm.max_map_count=655360 |
修改完这个后需要用命令 sysctl –p 使修改生效
解决 bootstrap.memory_lock: true 报错:
需要设置下系统配置文件,首先要切换到root用户,接着做以下修改:
1、修改/etc/security/limits.conf
文件最后添加以下内容:
~]# vim /etc/security/limits.conf * soft nofile 65536 * hard nofile 65536 * soft nproc 32000 * hard nproc 32000 * soft memlock unlimited * hard memlock unlimited
# 其中,* 为运行程序的用户,可根据自己的用户进行更改
~]# vim /etc/sysctl.conf vm.swappiness=0
~]# sysctl –p #执行以下命令使变动立即生效
重启系统 |
2、修改/etc/systemd/system.conf
分别修改以下内容:
DefaultLimitNOFILE=65536
DefaultLimitNPROC=32000
DefaultLimitMEMLOCK=infinity
3、执行以下操作,立即生效
/bin/systemctl daemon-reload
# 第17行,打开该配置并设置集群名称,如 elk+ip后两位 cluster.name: elk-116.8 # 第23行,打开该配置并设置节点名称,如 node-ip后两位 node.name: node-116.8 # 第33行,打开该配置并设置data存放的路径 path.data: /home/elk/es/data # 第37行,打开该配置并设置logs日志存放的路径 path.logs: /home/elk/es/logs # 第55行,打开该配置并设置为监听的网络地址 network.host: 192.168.116.8 # 第59行,打开该配置并设置监听的端口 http.port: 9200 # 第68行,建议打开此配置,在启动此节点时,传递主机的初始列表以执行发现,单台机器只填写一个IP,多台机器使用填写多个IP,用逗号隔开。ip可以用主机名代替。 discovery.seed_hosts: ["192.168.116.8"] # 第72行,建议打开此配置,使用初始的符合主机资格的节点集引导集群,填写节点名称即可。 cluster.initial_master_nodes: ["node-116.8"] |
Running Elasticsearch with systemd
启动 elasticsearch 服务:
systemctl daemon-reload
systemctl enable elasticsearch.service
systemctl start elasticsearch.service
本地查看服务是否启动:
[root@localhost ~]# netstat -ntpl | grep 9200
tcp6 0 0 192.168.118.133:9200 :::* LISTEN 2326/java
通过浏览器登录,页面展示如下:
kibana安装部署
官网地址:
https://www.elastic.co/cn/elasticsearch/
https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html
kibana官方安装教程:
https://www.elastic.co/guide/en/kibana/7.7/rpm.html
Import the Elasticsearch PGP Key
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Installing from the RPM repository
vim /etc/yum.repos.d/kibana.repo
Download and install the RPM manually
Run Kibana with systemd
配置 kibana.yml如下:
[root@localhost ~]# cat /etc/kibana/kibana.yml | grep "^[a-z]"
server.port: 5601
server.host: "192.168.118.133"
server.name: "kibana-118.133"
elasticsearch.hosts: ["http://192.168.118.133:9200"]
i18n.locale: "zh-CN"
# 第7行,启用该配置,并修改为IP地址 server.host: "192.168.116.8" # 第25行,启用该配置,并自定义服务名 server.name: "kibana-116.8" # 第28行,启用该配置,并修改为ES的地址和端口 elasticsearch.hosts: ["http://192.168.116.8:9200"] # 第115行,启用该配置,设置语言环境为中文 i18n.locale: "zh-CN" |
启动 kibana 服务:
[root@localhost ~]# systemctl start kibana
本地查看服务是否启动:
[root@localhost ~]# netstat -atnop|grep 5601
tcp 0 0 192.168.118.133:5601 0.0.0.0:* LISTEN 2675/node off (0.00/0/0)
通过浏览器登录,页面展示如下:
Logstash安装部署
官网地址:
https://www.elastic.co/cn/elasticsearch/
https://www.elastic.co/guide/en/elastic-stack/current/installing-elastic-stack.html
Logstash官方安装教程:
https://www.elastic.co/guide/en/logstash/7.7/installing-logstash.html#installing-logstash
Download and install the public signing key:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
vim /etc/yum.repos.d/logstash.repo
And your repository is ready for use. You can install it with:
sudo yum install logstash
Run Logstash with systemd
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable logstash.service
sudo systemctl start logstash.service
sudo systemctl stop logstash.service
配置logstash:
修改logstash启动内存大小
[root@server1 yum.repos.d]# vim /etc/logstash/jvm.options
-Xms256M
-Xmx256M 此处大小根据自己虚拟机内存大小分配
修改logstash基本信息
[root@server1 yum.repos.d]# vim /etc/logstash/logstash.yml #此文件同elasticsearch用来指定日志路径等信息,可以为默认。
启动logstash
[root@server1 yum.repos.d]# systemctl start logstash
[root@server1 yum.repos.d]# ps -ef |grep logstash
logstash 10478 1 85 22:47 ? 00:00:09 /bin/java -Xms256M -Xmx256M -XX:+UseConcMarkSweepGC -XX:CMSInitiatin
[root@server1 ~]# vim /etc/logstash/conf.d/system.conf
input { file { path => "/var/log/messages" #日志路径 type => "systemlog" #类型 start_position => "beginning" #logstash 从什么位置开始读取文件 stat_interval => "2" #logstash 每隔多久检查一次被监听文件状态(是否有更新) ,默认是 1 秒。 } } output { elasticsearch { hosts => ["192.168.118.133:9200"] #指定elasticsearch监听地址 index => "logstash-systemlog-%{+YYYY.MM.dd}" #索引名称 } } |
检测配置文件是否有语法错误:
/usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/system.conf -t
重启logstash
[root@server1 ~]# systemctl start logstash.service
查看进程:
ps -ef|grep logstash
Kibana中创建索引
点击管理模块
创建索引模式
输入想要创建的索引名称
这里选择使用时间戳方式
这里索引已经创建完成,可以看到索引信息
点击dashboard,搜索刚才创建的索引
可以看到已经有数据了
到此步已经完成了ELK对日志的监控
总结
ELK的功能十分强大,它能够很好地将复杂无序的日志友好的展示出来,方便IT人员快速的定位问题。本次搭建因为资源有限,所以架构比较简单,组件相对比较少。在企业中经常采用elasticsearch和logstash集群模式来提高性能,而且经常会用到filebeat,Redis等组件提高效率。安装配置比较简单,三个插件可以直接yum安装到底。重要的是配置有点复杂。
参考文章:
ELK(7.3版本)的搭建
https://blog.csdn.net/weixin_45413603/article/details/100050535
ELK-7.5搭建及监控日志教程
https://blog.csdn.net/lucky_ykcul/article/details/103302528
ELK-7.6.1部署记录
https://blog.csdn.net/wangtiandi/article/details/104915311
centos7.4安装elk7.7.0最新版本
https://blog.csdn.net/huangfujin321/article/details/106328278/