elk讲解与部署对接kafka完成日志收集系统

elk(elasticsearch + logstash + kibana )技术栈用于日志收集展示
一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大的场景中,此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询、数据分布在多个物理机上无法汇集。因此我们需要集中化的日志管理,所有服务器上的日志收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

一般大型系统是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

一个完整的集中式日志系统,需要包含以下几个主要特点:

  • 收集-能够采集多种来源的日志数据
  • 传输-能够稳定的把日志数据传输到中央系统
  • 存储-如何存储日志数据
  • 分析-可以支持 UI 分析
  • 警告-能够提供错误报告,监控机制

ELK提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。目前主流的一种日志系统。

应用包含:

  • 应用日志
  • 数据库慢sql

常用架构:

在这里插入图片描述
这是最简单的一种ELK架构方式。优点是搭建简单,易于上手。缺点是Logstash耗资源较大,运行占用CPU和内存高。另外没有消息队列缓存,存在数据丢失隐患。

此架构由Logstash分布于各个节点上搜集相关日志、数据,并经过分析、过滤后发送给远端服务器上的Elasticsearch进行存储。Elasticsearch将数据以分片的形式压缩存储并提供多种API供用户查询,操作。用户亦可以更直观的通过配置Kibana Web方便的对日志查询,并根据数据生成报表。

架构2

在这里插入图片描述
此种架构引入了消息队列机制,位于各个节点上的Logstash Agent先将数据/日志传递给Kafka(或者Redis),并将队列中消息或数据间接传递给Logstash,Logstash过滤、分析后将数据传递给Elasticsearch存储。最后由Kibana将日志和数据呈现给用户。因为引入了Kafka(或者Redis),所以即使远端Logstash server因故障停止运行,数据将会先被存储下来,从而避免数据丢失。

架构3
在这里插入图片描述
此种架构将收集端logstash替换为beats,更灵活,消耗资源更少,扩展性更强。同时可配置Logstash 和Elasticsearch 集群用于支持大集群系统的运维日志数据监控和查询。

架构4
在这里插入图片描述
此架构使用结合架构三与架构二,针对架构三虽然filebeat相对logstash性能更好,但是也是针对log文件的收集,同样需要频繁对日志扫描,所以采用应用插件如logback等形式直接输出日志到kafka,并将队列中消息或数据间接传递给Logstash,Logstash过滤、分析后将数据传递给Elasticsearch存储。最后由Kibana将日志和数据呈现给用户。因为引入了Kafka,所以即使远端Logstash server因故障停止运行,数据将会先被存储下来,从而避免数据丢失。

这种可能会对比filebeat 局限性大一点 , 针对java应用可以很好的利用两种架构的优点,同时削落了filebeat的性能占用

Input:输入数据到logstash。

支持插件列表 https://www.elastic.co/guide/en/logstash/current/input-plugins.html

一些常用的输入为:

file:从文件系统的文件中读取,类似于tail -f命令

syslog:在514端口上监听系统日志消息,并根据RFC3164标准进行解析

redis:从redis service中读取
kafka:从kafka 读取
beats:从filebeat中读取

Filters:数据中间处理,对数据进行操作。

https://www.elastic.co/guide/en/logstash/current/filter-plugins.html

一些常用的过滤器为:

grok:解析任意文本数据,Grok 是 Logstash 最重要的插件。它的主要作用就是将文本格式的字符串,转换成为具体的结构化的数据,配合正则表达式使用。内置120多个解析语法。

官方提供的grok表达式:https://github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns
grok在线调试:https://grokdebug.herokuapp.com/

mutate:对字段进行转换。例如对字段进行删除、替换、修改、重命名等。

drop:丢弃一部分events不进行处理。

clone:拷贝 event,这个过程中也可以添加或移除字段。

geoip:添加地理信息(为前台kibana图形化展示使用)

Outputs:outputs是logstash处理管道的最末端组件。一个event可以在处理过程中经过多重输出,但是一旦所有的outputs都执行结束,这个event也就完成生命周期。

https://www.elastic.co/guide/en/logstash/current/output-plugins.html

一些常见的outputs为:

elasticsearch:可以高效的保存数据,并且能够方便和简单的进行查询。

file:将event数据保存到文件中。

mail: 匹配错误点,发送邮件预警
exec: 匹配错误点,执行shell 脚本 可以对接 钉钉 , 邮件 , 微信 , 短信等

graphite:将event数据发送到图形化组件中,一个很流行的开源存储图形化展示的组件。

Codecs:codecs 是基于数据流的过滤器,它可以作为input,output的一部分配置。Codecs可以帮助你轻松的分割发送过来已经被序列化的数据。

一些常见的codecs:
plain: 默认
json:使用json格式对数据进行编码/解码。

multiline:将汇多个事件中数据汇总为一个单一的行。比如:java异常信息和堆栈信息。

部署

docker-compose.yml

这里只是把logstash 配置弄了数据卷 , 正常应该把data 也映射一下数据卷

version: "3.2"
services:
    elasticsearch:
      image: docker.elastic.co/elasticsearch/elasticsearch:7.4.2
      container_name: elasticsearch
      environment:
        - discovery.type=single-node
        - bootstrap.memory_lock=true
        - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      ports:
        - 9200:9200
      networks:
        - "elk-net"
    logstash:
      image: docker.elastic.co/logstash/logstash:7.4.2
      container_name: logstash
      volumes:
        - ./logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf
      networks:
        - "elk-net"
    kibana:
        image: docker.elastic.co/kibana/kibana:7.4.2
        ports:
          - "5601:5601"
        networks:
          - "elk-net"
networks:
      elk-net:



同级目录创建 logstash 目录

mkdir logstash ; cd logstash

创建配置文件

vim logstash.conf

这边需要注意的是不同版本的配置key可能不一样,就像我之前看网上博客 使用topic_id 但是后面已经过时了,没办法读取
如果版本与我一致则不用考虑这个问题,具体以上面附的官网版本为准

input {
  kafka {
  
    bootstrap_servers => ["192.168.203.102:9092,192.168.203.102:9093"]
    decorate_events => true
    topics => ["logback-kafka"]
 }
}
output {
  elasticsearch {
    # 因为没有对es 额外设置密码之类的,都是默认的
    hosts  => ["http://192.168.203.102:9200"]
  }
 stdout {
    codec => rubydebug  # 将日志输出到当前的终端上显示
  }
}

然后启动我们的elk

cd …/ ; docker-compose up

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

木秀林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值