前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >ELK 配置多数据源收集日志

ELK 配置多数据源收集日志

作者头像
Linux运维技术之路
发布2025-02-04 15:57:47
发布2025-02-04 15:57:47
12700
代码可运行
举报
运行总次数:0
代码可运行

ELK 配置多数据源收集日志

目前主要涉及采集日志主要有2种,

  • • 1、k8s 容器日志
  • • 2、nginx 日志
  • • 3、日志采集过来就行,不对字段进行切割 要实现多数据源的日志处理,并根据日志类型为不同的日志流设置不同的标签或索引,您可以在 Logstash 配置中使用条件语句(if)来判断日志类型,并相应地改变其索引或标签。 具体来说,您可以根据日志源的标识(比如 log_type、beat 输入标签或其他特征)来决定是否使用不同的索引模式。例如,针对 Nginx 日志您想给它加上 nginx 标签,其他的默认使用 k8s-app-log 标签。

一、配置Logstash 支持多数据源

1、logstash 配置文件如下

代码语言:javascript
代码运行次数:0
复制
input {
beats {
    port=>5044
    client_inactivity_timeout=>1800
  }
}

filter {
# 如果 log_type 是 nginx,则给它添加 nginx 标签
if [fields][log_type] =="nginx" {
    mutate {
      add_field=> { "log_type"=>"nginx" }
    }
  } else {
    mutate {
      add_field=> { "log_type"=>"k8s-app-log" }
    }
  }
}

output {
# 判断 log_type 是否是 nginx,并根据条件发送到不同的索引
if [log_type] =="nginx" {
    elasticsearch {
      hosts=> ["localhost"]
      index=>"nginx-log-%{+YYYY.MM.dd}"
      # user => "elastic"  # 如果需要认证可以取消注释并填充
      # password => "changeme"  # 如果需要认证可以取消注释并填充
    }
  } else {
    elasticsearch {
      hosts=> ["localhost"]
      index=>"k8s-app-log-%{+YYYY.MM.dd}"
      # user => "elastic"  # 如果需要认证可以取消注释并填充
      # password => "changeme"  # 如果需要认证可以取消注释并填充
    }
  }
}

2、配置详解

  1. 1. 输入配置
    • • 使用 beats 插件从 Filebeat 接收日志。
    • • 日志会通过端口 5044 接收,设置了 client_inactivity_timeout => 1800 来确保在 30 分钟内没有活动的客户端会被断开。
  2. 2. 过滤器(filter)
    • • 使用条件语句 if [fields][log_type] == "nginx" 来检查日志是否来自 Nginx。如果是 Nginx 日志,添加一个字段 log_type => "nginx",否则设置为 log_type => "k8s-app-log",这样可以区分不同来源的日志。
  3. 3. 输出配置
    • • 根据 log_type 字段的值,将日志输出到不同的 Elasticsearch 索引。
    • • 如果是 Nginx 日志,日志会被发送到 nginx-log-%{+YYYY.MM.dd} 索引。
    • • 其他日志则会被发送到 k8s-app-log-%{+YYYY.MM.dd} 索引。

3 优化与调试

日志监控:使用 stdout 输出来调试和查看处理后的日志,确保 log_type 字段正确传递:

代码语言:javascript
代码运行次数:0
复制
output {
  stdout { codec => rubydebug }
}

这会让您查看在 Logstash 处理后的日志数据,以便进行调试。

二、filebeat 采集日志的配置

1、nginx配置

您需要确保在 Filebeat 配置中正确设置 log_type 字段,以便在 Logstash 中能够根据该字段进行区分。以下是 Filebeat 配置的一个示例:

代码语言:javascript
代码运行次数:0
复制
filebeat.inputs:
  -type:log
    enabled:true
    paths:
      -/data/logs/nginx/*.log
    fields:
      log_type:nginx

output.logstash:
hosts: ["10.160.29.3:5044"]

在这个配置中,Nginx 日志将会带有 log_type: nginx 字段。您可以根据需要为其他日志源设置不同的 log_type 字段,从而在 Logstash 中区分它们并处理。

2、k8s 应用日志的配置

配置文件(包含k8s-app,tomcat日志)

代码语言:javascript
代码运行次数:0
复制
# ============================== Filebeat inputs ===============================
filebeat.inputs:
-type:log
enabled:true
paths:
    -/data/logs/*/*.log
multiline.type:pattern
multiline.pattern:'^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate:true
multiline.match:after

-type:log
enabled:true
paths:
    -/opt/t-manager/logs/catalina.out
multiline.pattern:'^[[:space:]]'
multiline.negate:false
multiline.match:after
tags: ["t-manager"]
# ------------------------------ Logstash Output -------------------------------
output.logstash:
hosts: ["192.168.40.224:5044"]
第一个日志输入: /data/logs/*/*.log
代码语言:javascript
代码运行次数:0
复制
- type:log
enabled:true
paths:
    -/data/logs/*/*.log
multiline.type:pattern
multiline.pattern:'^[0-9]{4}-[0-9]{2}-[0-9]{2}'
multiline.negate:true
multiline.match: after
  • type: log:指定 Filebeat 收集的是日志文件。
  • enabled: true:启用此日志输入,意味着 Filebeat 会收集这些文件的日志。
  • paths
    • /data/logs/*/*.log:匹配 /data/logs/ 目录下的所有子目录中的 .log 文件。* 是通配符,表示该目录下的所有子目录和文件都将被收集。
  • 多行日志(multiline)配置
    • multiline.type: pattern:指定多行日志的类型为正则表达式匹配。
    • multiline.pattern: '^[0-9]{4}-[0-9]{2}-[0-9]{2}':定义了匹配多行日志的正则表达式。这个模式匹配的是以日期(YYYY-MM-DD 格式)开头的行。例如,日志文件中每一行的开始部分是类似 2025-01-21 的日期。
    • multiline.negate: true:表示匹配的行 应该是多行日志的开始。意思是,如果一行的开始没有匹配到日期模式,那么这行是当前多行日志的一部分。
    • multiline.match: after:此设置意味着如果一行没有匹配到正则表达式,它会被视为前一行的继续,直到下一行符合正则表达式为止。因此,所有不以日期开头的行会被合并到前一行。
第二个日志输入: /opt/t-manager/logs/catalina.out
代码语言:javascript
代码运行次数:0
复制
- type:log
enabled:true
paths:
    -/opt/t-manager/logs/catalina.out
multiline.pattern:'^[[:space:]]'
multiline.negate:false
multiline.match:after
tags: ["t-manager"]
  • type: log:指定 Filebeat 收集的是日志文件。
  • enabled: true:启用此日志输入。
  • paths
    • /opt/t-manager/logs/catalina.out:这是指定的日志路径,Filebeat 会收集此路径下的 catalina.out 日志文件。
  • 多行日志(multiline)配置
    • multiline.pattern: '^[[:space:]]':定义了匹配多行日志的正则表达式。这里使用的是 POSIX 字符类 [:space:] 来匹配任何空格字符(包括空格、制表符等),即匹配以空白字符开头的行。
    • multiline.negate: false:表示匹配的行是多行日志的开始,而不是继续。即以空白字符开头的行会被视为当前日志行的延续。
    • multiline.match: after:如果当前行符合 multiline.pattern 的匹配(即行以空白字符开头),则这行被认为是前一行的继续。
  • tags: ["t-manager"]:给这个日志输入加上 t-manager 标签。这个标签会被自动附加到每一条来自 catalina.out 的日志上,可以在后续的处理或输出中进行筛选。
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-01-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Linux运维技术之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ELK 配置多数据源收集日志
  • 一、配置Logstash 支持多数据源
    • 1、logstash 配置文件如下
    • 2、配置详解
    • 3 优化与调试
  • 二、filebeat 采集日志的配置
    • 1、nginx配置
    • 2、k8s 应用日志的配置
    • 配置文件(包含k8s-app,tomcat日志)
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档