Filebeat + Kafka + Elasticsearch + Kibana 实现日志收集与管理

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
日志服务 SLS,月写入数据量 50GB 1个月
简介: 上篇文章介绍了 如何在 Django 中优雅的记录日志,这篇来谈谈怎么管理以及查看日志。说到查看日志,这么简单的事情还值得写篇文章吗?文件已经有了,直接 vim 打开不就完了。话虽如此,但有时候这样做却并不可行。

上篇文章介绍了 如何在 Django 中优雅的记录日志,这篇来谈谈怎么管理以及查看日志。


说到查看日志,这么简单的事情还值得写篇文章吗?文件已经有了,直接 vim 打开不就完了。话虽如此,但有时候这样做却并不可行。

如果是单台服务器的话,直接查看本地文件也是可以的,再搭配一些 Linux 命令,基本可以快速定位到问题。但现实情况中,我们的服务大部分都是部署在多台服务器上的,如果出现故障,到底是哪台服务器出的问题呢?很难排查,只能逐个登录服务器查看日志,这样做效率就太低了。

所以,必须得有一个集中管理日志的地方,可以把多台服务器上的日志汇总到一起。这样如果出现故障,我们到日志集中管理平台上一查,就可以快速定位到问题,并且可以确切的知道具体是哪台服务器出现了问题,何乐而不为呢?

这篇文章主要就是来解决这个问题。

怎么解决呢?说来也简单,因为已经有一套非常成熟的日志分析框架了,叫 ELK,而且在各大互联网公司都有成功的应用实践,网上资料也很多。

由于公司里面已经有一套日志分析框架了,所以,这件事情对我来说就更简单了,我只需要把日志内容发出去就好了。

在这里,我没有用 Logstash,而是用了更轻量的 Filebeat,配置起来也更方便。


Filebeat 日志源配置:


filebeat.inputs:
# Each - is an input. Most options can be set at the input level, so
# you can use different inputs for various configurations.
# Below are the input specific configurations.
- type: log
  # Change to true to enable this input configuration.
  enabled: true
  # Paths that should be crawled and fetched. Glob based paths.
  paths:
    - /log/error.log
  # 这三行可以将 json 内容解析成键值对的形式,否则会将全部 json 内容放到一个 message 字段里
  json.keys_under_root: true
  json.add_error_key: true
  json.overwrite_keys: true
复制代码


Filebeat 发送到 Elasticsearch:


#==================== Elasticsearch template setting ==========================
setup.template.name: "weblog"
setup.template.pattern: "weblog_*"
setup.template.overwrite: false
setup.template.enabled: true
setup.template.settings:
  index.number_of_shards: 1
#-------------------------- Elasticsearch output ------------------------------
output.elasticsearch:
  hosts: ["127.0.0.1:9200"]
  # 按月建索引
  index: "weblog_%{+YYYY.MM}"
  # Protocol - either `http` (default) or `https`.
  # protocol: "https"
  # Authentication credentials - either API key or username/password.
  # api_key: "id:api_key"
  username: "elastic"
  password: "changeme"
复制代码


配置发送到 Elasticsearch 时候出现一个问题,花了很长时间才解决,问题如下:


(status=404): {"type":"type_missing_exception","reason":"type[doc] missing","index_uuid":"j9yKwou6QDqwEdhn4ZfYmQ","index":"secops-seclog_2020.04.16","caused_by":{"type":"illegal_state_exception","reason":"trying to auto create mapping, but dynamic mapping is disabled"}}
复制代码


网上查找资料,大部分给出的解决办法都是配置 document_type,但是我用的 Filebeat 是 5.6 版本,这个参数已经取消了,无奈只能另找办法。

最后,就在我已经快要放弃的时候,通过把 Elasticsearch template type 改成 doc,而不是用自定义字段,解决了这个问题。

而且我发现一个很奇怪的现象,那就是总能在快要放弃之时找到解决问题的办法,所以多坚持一下还是很有必要的。

发送到 Elasticsearch 之后,就可以通过 Kibana 从页面来查询数据了,但这样做并不是最好的办法。更通用的架构是,先把数据发送到数据总线 Kafka,然后通过消费者程序来消费 Kafka 里的数据,最后入库到 Elasticsearch 或者其他存储组件。


Filebeat 发送到 Kafka:


output.kafka:
  hosts: ["kafka1:9092"]
  topic: 'web-log'
  username: 'XXX'
  password: 'XXX'
  partition.round_robin:
    reachable_only: false
  required_acks: 1
  compression: gzip
  max_message_bytes: 1000000
复制代码


去除不需要的字段:


Filebeat 在发送日志时,会添加一些字段,如果不想要这些字段的话,可以通过下面的配置将这些字段过滤。


#================================ Processors =====================================
# Configure processors to enhance or manipulate events generated by the beat.
processors:
  - drop_fields:
      fields: ["agent",  "ecs", "host", "input", "log"]
  # - add_host_metadata: ~
  # - add_cloud_metadata: ~
  # - add_docker_metadata: ~
  # - add_kubernetes_metadata: ~
复制代码


以上是 Filebeat 的全部配置,如果想在生产环境使用 ELK 全部组件,那估计还是需要借助于公司基础大数据平台,而且搭建,部署,测试,优化也是一个漫长的过程,我这方面经验也不多,就没办法深入介绍了。

但如果想自己搭建一套测试玩玩,还是比较简单的,直接在官网查询相应文档,配置起来也比较简单。网速给力的话,应该很快就可以搞定,祝大家玩的愉快。

以上。


目录
相关文章
|
2月前
|
存储 运维 监控
超越传统模型:从零开始构建高效的日志分析平台——基于Elasticsearch的实战指南
【10月更文挑战第8天】随着互联网应用和微服务架构的普及,系统产生的日志数据量日益增长。有效地收集、存储、检索和分析这些日志对于监控系统健康状态、快速定位问题以及优化性能至关重要。Elasticsearch 作为一种分布式的搜索和分析引擎,以其强大的全文检索能力和实时数据分析能力成为日志处理的理想选择。
164 6
|
2月前
|
存储 运维 监控
Elasticsearch Serverless 高性价比智能日志分析关键技术解读
本文解析了Elasticsearch Serverless在智能日志分析领域的关键技术、优势及应用价值。
104 8
Elasticsearch Serverless 高性价比智能日志分析关键技术解读
|
1月前
|
存储 SQL 监控
|
1月前
|
自然语言处理 监控 数据可视化
|
1月前
|
运维 监控 安全
|
1月前
|
存储 监控 安全
|
1月前
|
存储 数据采集 监控
开源日志分析Elasticsearch
【10月更文挑战第22天】
50 5
|
1月前
|
机器学习/深度学习 运维 监控
开源日志分析Kibana
【10月更文挑战第22天】
42 3
|
2月前
|
存储 消息中间件 大数据
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
大数据-69 Kafka 高级特性 物理存储 实机查看分析 日志存储一篇详解
49 4
|
2月前
|
存储 消息中间件 大数据
大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩
大数据-70 Kafka 高级特性 物理存储 日志存储 日志清理: 日志删除与日志压缩
51 1