EFK-fluentd抓取日志发送到es

1.EFK介绍

ELK是三个开源软件的缩写,分别表示:Elasticsearch,Logstash,Kibana。新增了一个FlieBeat,它是一个轻量级的日志收集处理工具,FlieBeat占用资源少,适用于在各个服务器上搜集日之后,传输给Logstash。

Elasticsearch:开源分布式搜索引擎,提供搜集,分析,缓存数据三大功能,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负 载等。

Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。一般工作方式为c/s架构, client 端安装在需要收集日志的主机上, server 端负责将收到的各节点日志进行过
滤、修改等操作在一并发往 elasticsearch 上去。
Kibana 也是一个开源和免费的工具, Kibana 可以为 Logstash 和 ElasticSearch 提供的日志分析友
好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
从ELK到EFK
由于 logstash 内存占用较大,灵活性相对没那么好, ELK 正在被 EFK 逐步替代 . 其中本文所讲的 EFK 是 Elasticsearch+Fluentd+Kfka。
Kubernetes 中比较流行的日志收集解决方案是 Elasticsearch 、 Fluentd 和 Kibana ( EFK) 技术栈,也是官方现在比较推荐的一种方案。
Fluentd 是一个收集日志文件的开源软件,目前提供数百个插件可用于存储大数据用于日志搜索,数据分析和存储。
Fluentd适用于以下场景。
收集多台服务器的访问日志进行可视化
在AWS 等云端使用 AutoScaling 时把日志文件收集至 S3( 需要安装插件 )
收集客户端的信息并输出至Message Queue ,供其他应用处理
常见架构:
1、 Elasticsearch + Logstash + Kibana
Elasticsearch:收集日志
Logstash:分析日志
Kibana:展示

2、Elasticsearch + Logstash + Filebeat + Kibana

与上一个架构相比,增加了 filebeat 模块,它是一个轻量级的日志收集处理工具 (Agent) ,部署在客户 端,Filebeat 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstash ,生产中使用较多,但缺 点是logstash 出现故障,会造成日志丢失。
3、 Elasticsearch + Logstash + Filebeat + Kibana + Redis

通过增加中间件来避免日志丢失。

4、Elasticsearch + Fluentd + Filebeat + Kibana

使用了 fluentd 代替了 logstash 。当然,我们也可以使用 Fluentd 的插件( fluent-plugin-elasticsearch)直接将日志发送给 Elasticsearch ,可以根据自己的需要替换掉 Filebeat ,从而形成
Fluentd => ElasticSearch => Kibana 的架构,也称作 EFK 。
基本流程
下面以第三种架构为例,基本流程如下:
1 、 Logstash-Shipper 获取日志信息发送到 redis 。
2 、 Redis 在此处的作用是防止 ElasticSearch 服务异常导致丢失日志,提供消息队列的作用。
3 、 logstash 是读取 Redis 中的日志信息发送给 ElasticSearch 。
4 、 ElasticSearch 提供日志存储和检索。
5 、 Kibana 是 ElasticSearch 可视化界面插件。

2.常见的结构

常见架构:

1、 Elasticsearch + Logstash + Kibana

Elasticsearch:收集日志
Logstash:分析日志
Kibana:展示
在这里插入图片描述

2、Elasticsearch + Logstash + Filebeat + Kibana

在这里插入图片描述
与上一个架构相比,增加了 filebeat 模块,它是一个轻量级的日志收集处理工具 (Agent) ,部署在客户 端,Filebeat 占用资源少,适合于在各个服务器上搜集日志后传输给 Logstash ,生产中使用较多,但缺 点是logstash 出现故障,会造成日志丢失。

3、 Elasticsearch + Logstash + Filebeat + Kibana + Redis

在这里插入图片描述
通过增加中间件来避免日志丢失。

4、Elasticsearch + Fluentd + Filebeat + Kibana

在这里插入图片描述
使用了 fluentd 代替了 logstash 。当然,我们也可以使用 Fluentd 的插件( fluent-plugin-elasticsearch)直接将日志发送给 Elasticsearch ,可以根据自己的需要替换掉 Filebeat ,从而形成
Fluentd => ElasticSearch => Kibana 的架构,也称作 EFK 。

3.基本流程

下面以第三种架构为例,基本流程如下:
1 、 Logstash-Shipper 获取日志信息发送到 redis 。
2 、 Redis 在此处的作用是防止 ElasticSearch 服务异常导致丢失日志,提供消息队列的作用。
3 、 logstash 是读取 Redis 中的日志信息发送给 ElasticSearch 。
4 、 ElasticSearch 提供日志存储和检索。
5 、 Kibana 是 ElasticSearch 可视化界面插件。

Fluentd参考链接:https://docs.fluentd.org/
ES参考链接:https://www.elastic.co/guide/index.html
ELK参考链接:https://blog.csdn.net/weixin_49319422/article/details/117356310

过多的就不介绍了,在这里只介绍一下fluentd安装和使用,其他的请参考笔者的elk

4.fluentd安装和使用

因为fluentd这里没有发送到es的,所以这里需要用dockerfile打包镜像安装一下依赖

FROM fluentd
USER root
RUN gem install fluent-plugin-elasticsearch \
fluent-plugin-tail-ex \
fluent-plugin-tail-multiline

USER fluent
#多留个端口出来供以后转发用
EXPOSE 24224 24224/udp 8888

接下载这里直接配置fluent.conf文件

<source>
  @type tail                     #类型
  @id input_tail                 #标识
  <parse>
    @type regexp                   #自定义正则
    expression /^(?<asctime>\s*[^ ]* [^ ]*)\s*\[(?<levelname>[^\]]*)\]\s*\[(?<user>[^\]]*)[,](?<request_id>[^\]]*)\]\s*\[(?<host>[^\]]*)[,](?<application>[^\]]*)[,](?<process>[^\]]*)[,](?<thread>[^\]]*)\]\s*\[(?<pathname>[^\]]*)\][:]\s*(?<user_name>[a-zA-Z0-9]+)[|](?<remote_addr>(([01]{
    
    0,1}\d{
    
    0,1}\d|2[0-4]\d|25[0-5])\.){
    
    3}([01]{
    
    0,1}\d{
    
    0,1}\d|2[0-4]\d|25[0-5]))[|](?<message>.*)$/
  </parse>
  path /var/log/keystone/audit.log      #log目录
  pos_file /var/log/keystone/audit.log.pos          #偏移目录,如果fluentd重启,会记录上次的最后一次状态
  tag lecp-id                                       #指定源名称,在match匹配是可以做到过滤
</source>


<match lecp-id>                         #匹配tag为lecp-id的源
  @type elasticsearch                     #类型为es
  host 10.121.121.241                  #es的host
  port 9200                               #es端口
  flush_interval 1s                    #接受到新的日志多久发送
  index_name ${
    
    tag}-%Y%m%d              #设置es索引为tag加上年日期
  <buffer tag,time>                   #缓冲区
    timekey 1h                       #一小时刷新
  </buffer>
</match>

生成镜像,并启动

docker build -h -name my-fluentd .
docker run -d -it -p 5140:5140 --name=fluentd -v /opt/fluentd/fluent.conf:/fluentd/etc/fluent.conf -v /var/log/keystone/audit.log:/var/log/keystone/audit.log  -v /var/log/keystone/audit.log.pos:/var/log/keystone/audit.log.pos my-fluentd

#-v为挂载目录,将conf,log,和pos_file挂载到镜像里
#这里笔者踩过一个坑,就是在本地挂载到容器里的文件或目录可能是没有权限的,可以通过docker logs -f fluentd来查看权限是否通过

5.kibana展示

GET _cat/indices                查看es所有索引
GET /fluentd/_search            查看单个索引的内容

在这里插入图片描述

生成索引

在这里插入图片描述
在这里插入图片描述

在这里就已经大功告成了

猜你喜欢

转载自blog.csdn.net/weixin_49319422/article/details/121678850