Elastic stack日志分析集群部署
一、Elastic stack介绍
Elastic stack 俗称 ELK stack,是一组包括 Elasticsearch、Logstash 和 Kibana 在内的开源产品。Elastic Stack 由 Elastic 公司开发和维护。使用 Elastic stack,可以将系统日志发送到 Logstash,它是一个数据收集引擎,接受来自可能任何来源的日志或数据,并对日志进行归一化,然后将日志转发到 Elasticsearch,用于分析、索引、搜索和存储,最后使用 Kibana 表示为可视化数据,使用 Kibana,我们还可以基于用户的查询创建交互式图表。
官网介绍:https://www.elastic.co/cn/elastic-stack/
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据。
Beats是轻量级数据采集工具,包括:
(1)Packetbeat(搜集网络流量数据);
(2)Topbeat(搜集系统、进程和文件系统级别的 CPU 和内存使用情况等数据);
(3)Filebeat(搜集文件数据);
(4)Winlogbeat(搜集 Windows 事件日志数据)
(5)Metricbeat(收集系统级的 CPU 使用率、内存、文件系统、磁盘 IO 和网络 IO 统计数据);
(6)Auditbeat(采集linux审计日志);
1.1 ELK小型架构
优点是搭建简单,易于上手。缺点是Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患。建议小规模集群使用。此架构首先由Logstash分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的Elasticsearch进行存储。Elasticsearch将数据以分片的形式压缩存储并提供多种API供用户查询,操作。用户亦可以更直观的通过配置Kibana Web Portal方便的对日志查询,并根据数据生成报表。
1.2 引入消息队列机制架构
引入了消息队列机制,位于各个节点上的Logstash Agent先将数据/日志传递给Kafka(或者Redis),并将队列中消息或数据间接传递给Logstash,Logstash过滤、分析后将数据传递给Elasticsearch存储。最后由Kibana将日志和数据呈现给用户。因为引入了Kafka(或者Redis),所以即使远端Logstash server因故障停止运行,数据将会先被存储下来,从而避免数据丢失。这种架构适合于较大集群的解决方案,但由于Logstash中心节点和Elasticsearch的负荷会比较重,可将他们配置为集群模式,以分担负荷,这种架构的优点在于引入了消息队列机制,均衡了网络传输,从而降低了网络闭塞尤其是丢失数据的可能性,但依然存在Logstash占用系统资源过多的问题。
1.3 引入Logstash-forwarder架构
引入了Logstash-forwarder。首先,Logstash-forwarder将日志数据搜集并统一发送给主节点上的Logstash,Logstash分析、过滤日志数据后发送至Elasticsearch存储,并由Kibana最终将数据呈现给用户。这种架构解决了Logstash在各计算机点上占用系统资源较高的问题。经测试得出,相比Logstash,Logstash-forwarder所占用系统CPU和MEM几乎可以忽略不计。另外,Logstash-forwarder和Logstash间的通信是通过SSL加密传输,起到了安全保障。如果是较大集群,用户亦可以如结构三那样配置logstash集群和Elasticsearch集群,引入High Available机制,提高数据传输和存储安全。更主要的配置多个Elasticsearch服务,有助于搜索和数据存储效率。但在此种架构下发现Logstash-forwarder和Logstash间通信必须由SSL加密传输,这样便有了一定的限制性。
1.4 引入Beats架构图
将Logstash-forwarder替换为Beats。经测试,Beats满负荷状态所耗系统资源和Logstash-forwarder相当,但其扩展性和灵活性有很大提高。Beats platform目前包含有Packagebeat、Topbeat和Filebeat三个产品,均为Apache 2.0 License。同时用户可根据需要进行二次开发。这种架构原理基于第三种架构,但是更灵活,扩展性更强。同时可配置Logstash 和Elasticsearch 集群用于支持大集群系统的运维日志数据监控和查询。
二、ELK集群部署
2.1 节点准备
2.2 Elasticsearch节点部署
【注】X代表5,6,7三个节点配置相同。
(1)Elasticsearch YUM仓库配置
[root@X ~]# vim /etc/yum.repos.d/elastic.repo # 配置YUM仓库 [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md [root@X ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch # 导入 Elastic 公共签名密钥
(2)安装java环境
[root@X ~]# yum install java-openjdk -y
(3)安装 Elasticsearch
[root@X ~]# yum install elasticsearch -y
(4)修改主机名
[root@192-168-0-5 ~]# hostnamectl set-hostname es1.starcto.com [root@192-168-0-6 ~]# hostnamectl set-hostname es2.starcto.com [root@192-168-0-7 ~]# hostnamectl set-hostname es3.starcto.com
(5)自定义hosts
[root@X ~]# hostnamectl set-hostname es1.starcto.com 192.168.0.5 es1.starcto.com 192.168.0.6 es2.starcto.com 192.168.0.7 es3.starcto.com 192.168.0.8 kibana.starcto.com 192.168.0.9 logstash1.starcto.com 192.168.0.10 logstash2.starcto.com
(6)修改Elasticsearch节点配置
[root@X ~]# vim /etc/elasticsearch/elasticsearch.yml cluster.name: starcto-cluster node.name: es1.starcto.com network.host: 192.168.0.5 http.port: 9200 discovery.seed_hosts: ["es1.starcto.com", "es2.starcto.com", "es3.starcto.com"] cluster.initial_master_nodes: ["es1.starcto.com", "es2.starcto.com", "es3.starcto.com"] path.data: /var/lib/elasticsearch path.logs: /var/log/elasticsearch
【注】node.name和network.host根据每个节点真实情况填写即可。
(7)启动elasticsearch 节点
[root@X ~]# systemctl daemon-reload [root@X ~]# systemctl enable elasticsearch.service [root@X ~]# systemctl start elasticsearch.service
(8)Elasticsearch 群集状态检测
[root@es1 ~]# curl http://es1.starcto.com:9200 { "name" : "es1.starcto.com", "cluster_name" : "starcto-cluster", "cluster_uuid" : "SigqjwnRR4GzkZd5FrstWA", "version" : { "number" : "7.14.0", "build_flavor" : "default", "build_type" : "rpm", "build_hash" : "dd5a0a2acaa2045ff9624f3729fc8a6f40835aa1", "build_date" : "2021-07-29T20:49:32.864135063Z", "build_snapshot" : false, "lucene_version" : "8.9.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search" } [root@es1 ~]# curl -X GET http://es1.starcto.com:9200/_cluster/health?pretty { "cluster_name" : "starcto-cluster", "status" : "green", # 集群状态为green即为正常 "timed_out" : false, "number_of_nodes" : 3, # 三个node节点 "number_of_data_nodes" : 3, # 三个数据节点 "active_primary_shards" : 1, "active_shards" : 2, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 0, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 100.0 }
注意: 如果你想修改 JVM 堆大小,那么你可以编辑了文件/etc/elasticsearch/jvm.options,并根据你的环境更改以下参数:
[root@X ~]# vim /etc/elasticsearch/jvm.options -Xms1g -Xmx1g
2.3 logstash节点部署
【注】X代表logstash1和2两个节点都需要配置。
(1)修改主机名称
[root@192-168-0-9 ~]# hostnamectl set-hostname logstash1.starcto.com [root@192-168-0-10 ~]# hostnamectl set-hostname logstash2.starcto.com
(2)修改自定义hosts
[root@logstashX ~]# vim /etc/hosts 192.168.0.5 es1.starcto.com 192.168.0.6 es2.starcto.com 192.168.0.7 es3.starcto.com 192.168.0.8 kibana.starcto.com 192.168.0.9 logstash1.starcto.com 192.168.0.10 logstash2.starcto.com
(3)logstash YUM仓库配置
[root@logstashX ~]# vim /etc/yum.repos.d/logstash.repo [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md [root@logstashX ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch # 导入签名
(4)安装java环境
[root@logstashX ~]# yum install java-openjdk -y
(5)部署logstash
[root@logstashX ~]# yum install logstash -y
(6)修改logstash配置文件
[root@logstashX ~]# cd /etc/logstash [root@logstashX logstash]# cp logstash-sample.conf conf.d/logstash.conf [root@logstashX logstash]# vim conf.d/logstash.conf input { beats { port => 5044 } } output { elasticsearch { hosts => ["http://es1.starcto.com:9200", "http://es2.starcto.com:9200", "http://es3.starcto.com:9200"] index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}" #user => "elastic" #password => "changeme" } }
(7)启动logstash
[root@logstashX ~]# systemctl enable logstash [root@logstashX ~]# systemctl start logstash
(8)服务启动验证
[root@logstashX ~]# ss -tunlp | grep 5044 tcp LISTEN 0 128 *:5044 *:* users:(("java",pid=34360,fd=110)) [root@logstashX ~]# netstat -antulp Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 998/sshd tcp 0 0 192.168.0.9:22 10.25.25.25:50180 ESTABLISHED 33455/sshd: root [p tcp6 0 0 :::5044 :::* LISTEN 34360/java tcp6 0 0 :::22 :::* LISTEN 998/sshd tcp6 0 0 127.0.0.1:9600 :::* LISTEN 34360/java
2.4 Kibana节点部署
(1)修改主机名称
[root@192-168-0-8 ~]# hostnamectl set-hostname kibana.starcto.com
(2)修改自定义hosts
[root@kibana ~]# vim /etc/hosts 192.168.0.5 es1.starcto.com 192.168.0.6 es2.starcto.com 192.168.0.7 es3.starcto.com 192.168.0.8 kibana.starcto.com 192.168.0.9 logstash1.starcto.com 192.168.0.10 logstash2.starcto.com
(3)Kibana YUM仓库配置
[root@kibana ~]# vim /etc/yum.repos.d/kibana.repo [elasticsearch-7.x] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=1 autorefresh=1 type=rpm-md [root@logstashX ~]# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch # 导入签名
(4)部署Kibana
[root@kibana ~]# yum install kibana -y
(5)修改Kibana配置文件
[root@kibana ~]# vim /etc/kibana/kibana.yml server.host: "kibana.starcto.com" server.name: "kibana.starcto.com" elasticsearch.hosts: ["http://es1.starcto.com:9200", "http://es2.starcto.com:9200", "http://es3.starcto.com:9200"] [root@kibana ~]# netstat -antulp |grep 5601 tcp 0 0 192.168.0.8:5601 0.0.0.0:* LISTEN 2439/node
(6)访问Kibana
http://kibana.starcto.com:5601/app/home#/
http://kibana.starcto.com:5601/app/monitoring
【注】由截图可见,已经成功部署了三个Elasticearch节点,节点健康状态正常,一个kibana节点,节点状态正常。
2.5 部署filebeat采集日志
通过filebeat将业务服务器日志推送到logstash节点。
(1)客户端安装filebeat采集器
[root@ansible ~]# rpm -ivh https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-x86_64.rpm Retrieving https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.3.1-x86_64.rpm warning: /var/tmp/rpm-tmp.rNEwdp: Header V4 RSA/SHA512 Signature, key ID d88e42b4: NOKEY Preparing... ################################# [100%] Updating / installing... 1:filebeat-7.3.1-1 ################################# [100%]
(2)修改自定义hosts
[root@ansible ~]# vim /etc/hosts 192.168.0.9 logstash1.starcto.com 192.168.0.10 logstash2.starcto.com
(3)修改filebeat配置文件
[root@ansible ~]# vim /etc/filebeat/filebeat.yml filebeat.inputs: - type: log enabled: true paths: - /var/log/*.log - /var/log/messages - /var/log/sa/sa* - /var/log/dmesg #output.elasticsearch: # hosts: ["localhost:9200"] output.logstash: hosts: ["logstash1.starcto.com:5044","logstash2.starcto.com:5044"] loadbalance: true #开启负载均衡
【注】在 filebeat.inputs: 部分将 enabled: false 更改为 enabled: true,并在 paths 参数下指定我们可以发送到 logstash 的日志文件的位置;注释掉 output.elasticsearch 和 host 参数;删除 output.logstash: 和 hosts: 的注释,并在 hosts 参数添加两个 logstash 节点,以及设置 loadbalance: true。
(4)启动filebeat采集器
[root@ansible ~]# systemctl enable filebeat Created symlink from /etc/systemd/system/multi-user.target.wants/filebeat.service to /usr/lib/systemd/system/filebeat.service. [root@ansible ~]# systemctl start filebeat
(5)验证日志采集效果
访问 Kibana 用户界面,验证新索引是否可见。从左侧栏中选择管理选项,然后单击 Elasticsearch 下的索引管理:
创建索引模型:点击 Kibana 部分的 “Index Patterns”,它将提示我们创建一个新模型,点击 “Create Index Pattern” ,并将模式名称指定为 “filebeat”:
点击下一步,选择 “Timestamp” 作为索引模型的时间过滤器,然后单击 “Create index pattern”:
Analytics下点击Discover单击查看实时 filebeat 索引模型:
这表明 Filebeat 代理已配置成功,我们能够在 Kibana 仪表盘上看到实时日志。
三、解决方案概述
3.1 MySQL日志审计系统
MySQL日志审计系统,采用percona audit插件审计MySQL的访问情况,结果记录到指定文件中。通过Rsyslog将每个MySQL审计日志集中到Rsyslog Server的指定目录中,使用filebeat监控文件变化,上报到kafka。使用Logstash消费数据,把数据过滤切割后,写入ES中,用户通过kibana查询相关数据。
文章推荐:MySQL安全插件-数据库审计
作者:UStarGao
链接:https://www.starcto.com/Cloud-BigData-AI/196.html
来源:STARCTO
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
UCloud云平台推荐
随便看看
- 2022-06-18MongoDB事务开发之写操作事务writeConcern
- 2022-12-14Windows游戏服务器缺少.NET3.5环境依赖而诱发的时间戳转换问题
- 2021-05-15UDB MySQL主从复制延时的原因和解决方案
- 2021-07-03MySQL安全插件-密码复杂度+密码过期策略+登录失败处理
- 2023-08-18ubuntu修改hosts解析导致sudo命令卡住/hang住