Logstash 是一个开源的服务器端数据处理管道,允许同时从多个来源采集数据,将其转换,并将其发送到存储中。Logstash 是 ELK(Elasticsearch, Logstash, Kibana)堆栈中的核心组件,用于日志和事件数据的处理和转发。
Logstash 需要 Java 运行环境。确保系统上安装了 Java:
sudo apt update
sudo apt install default-jre -y
从官方仓库下载并安装 Logstash:
# 下载并安装 Logstash
wget https://artifacts.elastic.co/downloads/logstash/logstash-7.13.3.deb
sudo dpkg -i logstash-7.13.3.deb
Logstash 使用配置文件定义数据管道,包括输入(input)、过滤(filter)和输出(output)部分。
Logstash 的配置文件通常包含三个部分:input、filter 和 output。例如:
input {
# 输入插件配置
}
filter {
# 过滤插件配置
}
output {
# 输出插件配置
}
以下是一个简单的 Logstash 配置示例,从文件中读取数据,进行过滤处理,并将处理后的数据发送到 Elasticsearch。
创建配置文件
在 /etc/logstash/conf.d
目录下创建一个配置文件 logstash.conf
:
sudo nano /etc/logstash/conf.d/logstash.conf
配置文件内容
input {
file {
path => "/var/log/myapp/*.log"
start_position => "beginning"
sincedb_path => "/dev/null"
}
}
filter {
grok {
match => { "message" => "%{COMMONAPACHELOG}" }
}
date {
match => [ "timestamp" , "dd/MMM/yyyy:HH:mm:ss Z" ]
}
mutate {
remove_field => [ "timestamp" ]
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "myapp-logs-%{+YYYY.MM.dd}"
}
stdout {
codec => rubydebug
}
}
配置详解
input
部分:配置 Logstash 从指定路径的日志文件中读取数据。
path
:指定日志文件路径。start_position
:定义从文件的开始位置读取数据。sincedb_path
:禁用 sincedb 文件(用于记录文件读取位置)。filter
部分:配置数据过滤和处理。
grok
:使用 Grok 模式解析日志数据。%{COMMONAPACHELOG}
是一个预定义的模式,匹配常见的 Apache 日志格式。date
:将日志中的时间戳字段解析为标准日期格式。mutate
:移除不需要的字段。output
部分:配置数据输出。
elasticsearch
:将处理后的数据发送到 Elasticsearch。
hosts
:Elasticsearch 主机地址。index
:定义索引模式。stdout
:将处理后的数据输出到控制台,以 rubydebug
格式显示。启动 Logstash 以加载配置文件并处理数据:
sudo systemctl start logstash
sudo systemctl status logstash
curl -X GET "localhost:9200/_cat/indices?v"
可以通过 Kibana 查看处理后的数据。在 Kibana 中创建一个索引模式(例如 myapp-logs-*
),然后可以在 Kibana 的 Discover 页面查看日志数据。
Logstash 是一个强大的工具,能够从多个数据源采集数据,进行灵活的过滤和转换,并将处理后的数据发送到多个目标存储。通过配置 input、filter 和 output 部分,您可以构建各种复杂的数据处理管道,以满足不同的日志处理需求。上述示例展示了一个基本的文件日志处理和发送到 Elasticsearch 的过程,您可以根据需要扩展和定制 Logstash 配置,以适应更多的使用场景。