Logstash使用手册

Logstash 是 Elastic Stack(ELK Stack)中的一个核心组件,用于数据收集、处理和传输。它通过灵活的配置实现数据的输入、过滤和输出。以下是 Logstash 的配置详解,包括配置文件结构、常用插件和示例。


1. Logstash 配置文件结构

Logstash 配置文件通常分为三个部分:

  1. Input:定义数据输入源。

  2. Filter:对数据进行处理和转换。

  3. Output:定义数据输出目标。

配置文件的基本结构如下:

ruby
复制
input {
  # 输入插件配置
}

filter {
  # 过滤插件配置
}

output {
  # 输出插件配置
}

2. 常用插件

输入插件(Input Plugins)

  • file:从文件中读取数据。

  • beats:接收来自 Filebeat 或其他 Beats 的数据。

  • kafka:从 Kafka 主题中消费数据。

  • jdbc:从数据库中读取数据。

  • syslog:接收 Syslog 数据。

  • http:通过 HTTP 接收数据。

过滤插件(Filter Plugins)

  • grok:解析非结构化日志数据。

  • mutate:修改字段(如重命名、删除、替换)。

  • date:解析日期字段。

  • json:解析 JSON 格式的数据。

  • geoip:根据 IP 地址添加地理位置信息。

  • drop:丢弃不符合条件的事件。

  • clone:复制事件。

输出插件(Output Plugins)

  • elasticsearch:将数据发送到 Elasticsearch。

  • stdout:将数据输出到控制台(用于调试)。

  • kafka:将数据发送到 Kafka。

  • file:将数据写入文件。

  • jdbc:将数据写入数据库。


3. 配置示例

示例 1:从文件读取日志并输出到 Elasticsearch

ruby
复制
input {
  file {
    path => "/var/log/nginx/access.log"
    start_position => "beginning"
    sincedb_path => "/dev/null"  # 禁用 sincedb,用于测试
  }
}

filter {
  grok {
    match => { "message" => "%{COMBINEDAPACHELOG}" }
  }
  date {
    match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
  }
  geoip {
    source => "clientip"
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "nginx-access-logs-%{+YYYY.MM.dd}"
  }
  stdout {
    codec => rubydebug  # 输出到控制台,用于调试
  }
}

示例 2:从 Kafka 消费数据并输出到文件

ruby
复制
input {
  kafka {
    bootstrap_servers => "localhost:9092"
    topics => ["logs"]
  }
}

filter {
  json {
    source => "message"
  }
  mutate {
    rename => { "user" => "username" }
  }
}

output {
  file {
    path => "/var/log/logstash/output.log"
    codec => line { format => "%{message}" }
  }
}

示例 3:从数据库读取数据并输出到 Elasticsearch

ruby
复制
input {
  jdbc {
    jdbc_driver_library => "/path/to/mysql-connector-java.jar"
    jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
    jdbc_user => "root"
    jdbc_password => "password"
    schedule => "* * * * *"  # 每分钟执行一次
    statement => "SELECT * FROM orders"
  }
}

output {
  elasticsearch {
    hosts => ["http://localhost:9200"]
    index => "orders"
  }
}

4. 常用配置选项

输入插件(Input)

  • path(file 插件):指定文件路径。

  • start_position(file 插件):从文件的开头(beginning)或结尾(end)开始读取。

  • bootstrap_servers(kafka 插件):Kafka 服务器地址。

  • topics(kafka 插件):Kafka 主题名称。

过滤插件(Filter)

  • match(grok 插件):定义日志解析规则。

  • source(json 插件):指定 JSON 字段。

  • rename(mutate 插件):重命名字段。

  • remove_field(mutate 插件):删除字段。

输出插件(Output)

  • hosts(elasticsearch 插件):Elasticsearch 地址。

  • index(elasticsearch 插件):索引名称。

  • path(file 插件):输出文件路径。


5. 高级配置

多管道配置

Logstash 支持多管道配置,适用于处理不同类型的数据流。

  1. 创建管道配置文件(如 pipelines.yml):

    yaml
    复制
    - pipeline.id: nginx
      path.config: "/etc/logstash/conf.d/nginx.conf"
    - pipeline.id: kafka
      path.config: "/etc/logstash/conf.d/kafka.conf"
  2. 启动 Logstash 时指定配置文件:

    bash
    复制
    bin/logstash -f /etc/logstash/pipelines.yml

性能优化

  • 批量处理:增加 pipeline.batch.size 和 pipeline.batch.delay

  • 多线程:配置 pipeline.workers 为 CPU 核心数。

  • JVM 调优:调整 jvm.options 中的堆内存大小。


6. 常见问题与解决

问题 1:Logstash 启动失败

  • 原因:配置文件语法错误或插件未安装。

  • 解决

    1. 检查配置文件语法:

      bash
      复制
      bin/logstash --config.test_and_exit -f /path/to/config.conf
    2. 安装缺失的插件:

      bash
      复制
      bin/logstash-plugin install logstash-input-kafka

问题 2:数据未输出到 Elasticsearch

  • 原因:Elasticsearch 连接失败或索引配置错误。

  • 解决

    1. 检查 Elasticsearch 是否正常运行。

    2. 确认 hosts 和 index 配置正确。

问题 3:Grok 解析失败

  • 原因:日志格式与 Grok 模式不匹配。

  • 解决

    1. 使用 Grok Debugger 调试 Grok 模式。

    2. 调整 Grok 模式以匹配日志格式。

posted @   hanease  阅读(14)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
历史上的今天:
2022-02-26 SpringCloud(2)---入门篇
2022-02-26 SpringCloud(1)---入门篇
2022-02-26 分库分表(2) --- ShardingSphere(理论)
2022-02-26 分库分表(1) --- ShardingSphere(理论)
点击右上角即可分享
微信分享提示