page contents

ELK 日志收集系统

在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常低下。因此我们需要集中化的管理日志,ELK则应运而生。ELK=ElasticSeach+Logstash+Kibana,本项目采用的是 ElasticSeach + Logstash + kafka + Kibana

attachments-2021-02-vVwNV1S56030a1d62e776.png

1. ELK简介

在传统项目中,如果在生产环境中,有多台不同的服务器集群,如果生产环境需要通过日志定位项目的Bug的话,需要在每台节点上使用传统的命令方式查询,这样效率非常低下。因此我们需要集中化的管理日志,ELK则应运而生。ELK=ElasticSeach+Logstash+Kibana,本项目采用的是 ElasticSeach + Logstash + kafka + Kibana


2. 各个组件介绍

2.1 Logstash

Logstash 主要用于收集服务器日志,它是一个开源数据收集引擎,具有实时管道功能。Logstash 可以动态地将来自不同数据源的数据统一起来,并将数据标准化到您所选择的目的地。

Logstash 收集数据的过程主要分为以下三个部分:

  • 输入:数据(包含但不限于日志)往往都是以不同的形式、格式存储在不同的系统中,而 Logstash 支持从多种数据源中收集数据(File、Syslog、MySQL、消息中间件等等)。
  • 过滤器:实时解析和转换数据,识别已命名的字段以构建结构,并将它们转换成通用格式。
  • 输出:Elasticsearch 并非存储的唯一选择,Logstash 提供很多输出选择。

2.2 Elasticsearch

Elasticsearch (ES)是一个分布式的 Restful 风格的搜索和数据分析引擎,它具有以下特点:

  • 查询:允许执行和合并多种类型的搜索 — 结构化、非结构化、地理位置、度量指标 — 搜索方式随心而变。
  • 分析:Elasticsearch 聚合让您能够从大处着眼,探索数据的趋势和模式。
  • 速度:很快,可以做到亿万级的数据,毫秒级返回。
  • 可扩展性:可以在笔记本电脑上运行,也可以在承载了 PB 级数据的成百上千台服务器上运行。
  • 弹性:运行在一个分布式的环境中,从设计之初就考虑到了这一点。
  • 灵活性:具备多个案例场景。支持数字、文本、地理位置、结构化、非结构化,所有的数据类型都欢迎。

2.3 Kibana

Kibana 可以使海量数据通俗易懂。它很简单,基于浏览器的界面便于您快速创建和分享动态数据仪表板来追踪 Elasticsearch 的实时数据变化。其搭建过程也十分简单,您可以分分钟完成 Kibana 的安装并开始探索 Elasticsearch 的索引数据 — 没有代码、不需要额外的基础设施。

对于以上三个组件在 《ELK 协议栈介绍及体系结构》 一文中有具体介绍,这里不再赘述。

在 ELK 中,三大组件的大概工作流程如下图所示,由 Logstash 从各个服务中采集日志并存放至 Elasticsearch 中,然后再由 Kiabana 从 Elasticsearch 中查询日志并展示给终端用户。


3.目前系统采用的架构图

加了kafka 是想做一个数据缓冲, 和后期日志的实时计算处理.

这种架构的好处:

  1. 这种架构适合于较大集群的解决方案,但由于Logstash中心节点和Elasticsearch的负荷会比较重,可将他们配置为集群模式,以分担负荷;
  2. 这种架构的优点在于引入了消息队列机制,均衡了网络传输,从而降低了网络闭塞尤其是丢失数据的可能性,但依然存在Logstash占用系统资源过多的问题

attachments-2021-02-WswEnvCy6030a1eced216.png

  1. filebeat 将收集到到日志, 按照不同的 topic(主题) 传递给 kafka 集群;
  2. kafka集群, 将消息传递给后续;
  3. logstash 根据不同的 topic 的消息进行过滤, 然后存储到es;
  4. kibana 从es 中读取消息;


4. ELK日志收集系统实战展示

ELK收集系统信息

attachments-2021-02-YOwYAWoM6030a1fcd148a.png

ELK收集日志信息

attachments-2021-02-3lQsfSRb6030a2039be21.png


5. ELK 安装及配置

5.1 elk安装

ELK安装参考: https://www.elastic.co/cn/wha...

  • 注意: ELK 各个组件需要注意版本号要一致;

kafka + zookeeper 安装略

5.2 ELK 配置

5.2.1 filebeat 收集日志系统

# 在不同的目录下, 收集不同的日志, 发送到不同的topic
# 收集目录1下的日志, 发送到 topic1
- type: log
 enabled: true
 paths:
 - /data/docker/cactus-web/logs/cactus.safe.xxx.cn/app/*.log
 fields:
 log_topics: logs_xxx_app
# 收集目录2下的日志, 发送到 topic2
- type: log
 enabled: true
 paths:
 - /data/docker/cactus-web/logs/cactus.xxx.cn/web/*.log
 fields:
 log_topics: logs_xxx_web
#发送到Kafka集群的,对应的topic
output.kafka:
 #Kafka集群的 ip:port
 hosts: ["xx.20.xx.21:9092", "xx.220.xx.227:9092", "xx.xx.169.212:9092"]
 # 自动把上面的topic进行区分
 topic: '%{[fields][log_topics]}'
 # 发送后的一些配置
 partition.round_robin:
 reachable_only: false
 required_acks: 1
 compression: gzip
 max_message_bytes: 1000000

5.2.2 logstach 配置

# 消费kafka里面 对应的 topic 数据
input {
 kafka {
 bootstrap_servers => "xx.xx.169.210:9092,xx.220.169.227:9092,xx.220.169.212:9092"
 topics_pattern => "logs.*"
 consumer_threads => 5
 decorate_events => true
 codec => "json"
 }
}
# 过滤规则, 可以自己配置多个, 下面的配置是将filebeat自己产生的日志过滤掉
filter {
 ruby {
 code => "event.timestamp.time.localtime"
 }
 mutate {
 remove_field => ["beat"]
 }
}
# 输出到 对应的es里面
output {
 elasticsearch {
 hosts => ["xx.xx.169.210:9200", "xx.xx.169.227:9200", "xx.xx.169.212"]
 index =>  "%{[@metadata][kafka][topic]}-%{+YYYY-MM-dd}"
 codec => "json"
 }
 stdout { codec => rubydebug }
}


6. 通过kibana查看

attachments-2021-02-LzNKAc8H6030a22114367.png


想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-06-73IaAztA62a1c51bac3e1.jpeg

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1320 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章