写点什么

基于 ELK 的日志平台介绍

用户头像
Rayzh
关注
发布于: 2020 年 11 月 24 日
基于ELK的日志平台介绍

一、简介

Elastic Stack 是开源(www.elastic.co)的日志搜集解决方案,主要是解决分布式系统中日志集中管理。ELK 是 Elasticsearch、Logstash、Kibana 的简称。目前 Elastic Stack 生态圈的组件很多,适用于各种不同的业务场景,如日志分析、指标分析、网站搜索、安全分析等。


​ 搭建基于 ELK 的日志平台,主要是通过搜集程序日志,了解业务运行状况从而制定相应的调整策略。按照当前规划,制定的 ELK 整体架构图如下:


二、组件介绍

1、Beat

这里使用的是 Filebeat,轻量级的日志搜集工具。在 filebeat 之前,一直使用 logstash 搜集日志,占用服务器资源较高。Filebeat 主要是轻量级,建议不要有复杂的逻辑。

2、Kafka

用于存储日志内容的消息队列。Filebeat 采集的日志可以直接 output 到 kafka 中,相比 Redis 而言,Kafka 有吞吐量上的优势,并且可以根据消费者 id 不同进行多次消费。

3、Logstash

日志解析的主要工具。Kafka 里消息内容除了日志本身,还有一些 beat agent 的信息。Logstash 可以根据业务的需要,通过不同的规则,如正则、kv、split 等进行日志的清洗。之后输出到 Elasticsearch 中。

4、Elasticsearch

日志内容存储。Elastcisearch 可以日志如按照每天生成一个 index,如 k8s-2020.11.20。

5、Kibana、Grafna

Kibana 提供 2 个比较常用等功能。一个是实时的查询页面,日志清洗之后根据业务如 appname 和关键字去查看程序的运行状况;另外一个功能是提供了对 Elastcisearch 的监控和操作,我们可以通过页面看到 Elasticsearch 集群运行状况和做一些 curl restful 的操作如增加删除索引、DSL 查询语句等。

Grafna 主要用于大屏展示。使用 Elastcisearch 作为数据源,根据具体的查询语句展示业务指标。


三、组件主要配置总结

1、Filebeat

#=========================== Filebeat inputs =============================
filebeat.inputs:- type: log # Change to true to enable this input configuration. enabled: true # Paths that should be crawled and fetched. Glob based paths. paths: - /opt/nginx/logs/app1_access.log tags: ["app1"] #-------------------------- Kafka output ------------------------------output.kafka: # initial brokers for reading cluster metadata hosts: ["kafka1:9092", "kafka2:9092", "kafka3:9092"]
# message topic selection + partitioning topic: mytopic
required_acks: 1 compression: gzip max_message_bytes: 1000000 version: 0.10.0.0 # 低版本kafka需要指定版本号#================================ Logging =====================================# 配置Filebeat程序本身日志保存时长,避免日志量增长导致磁盘空间不足logging.level: infologging.to_files: truelogging.files: path: /var/log/filebeat name: filebeat keepfiles: 7 permissions: 0644
复制代码


2、Logstash

日志搜集过程中最核心的组件。Logstash input/output 支持很多插件,根据业务的不同可以使用不同的插件清洗成自己想要的格式。具体的使用参考官方介绍,由于版本的不同,相关细节以官网为准。

input {    # Logstash读取的数据源,这里是kafka    kafka {        bootstrap_servers => "kafka1:9092 kafka2:9092 kafka3:9092"        group_id => "ELK001"        topics => ["mytopic"]        consumer_threads => 3        auto_offset_reset => "earliest"        enable_auto_commit => "true"        codec => "json"    }}filter {    grok {        # apache标准日志解析规则        match => { "message" => "%{COMBINEDAPACHELOG}"}    }    urldecode {        # 对url的中文解码        all_fields => true    }}
output { # 输出到Elasticsearch elasticsearch { hosts => ["es1:9200","es2:9200","es3:9200"] index => "mytopic-%{+yyyy.MM.dd}" }}
复制代码

调试自己的规则可以使用如下:

input {    # 从控制台输入要解析的数据        stdin {}}filter{        grok {                match => {"message"=> "^<(?<log_type>[^>]+)><(?<appid>\-)><(?<timestamp>[^>]+)[^>\n]*><(?<thread_id>\d+)><(?<filename_line>\w+\.\w+:\d+)>\s+(?<stockinfo>.+)"}                }}
output { # 控制台输出解析结果 stdout {} }
复制代码

另外对于正则规则的调试也可以在 Kibana 后台的的 dev tools 中进行。


3、Elasticsearch

构建 Elastcisearch 集群主要注意如下 2 点:脑裂问题和 JVM 配置值的调优。这块详细的会在后面的文章中说明。


四、小结

这篇文章主要做个开篇,接下来准备几篇文章详细的说明相关使用和踩过的一些小坑。


发布于: 2020 年 11 月 24 日阅读数: 88
用户头像

Rayzh

关注

我知道我需要什么 2018.11.13 加入

主业是搞运维的,重心在容器生态和大数据生态上。 期待和大家的交流。

评论

发布
暂无评论
基于ELK的日志平台介绍