Linux Filebeat 设置报警的实用方案
核心要点
- Filebeat 本身不提供告警功能,需与 Elasticsearch/Kibana 的 Watcher/告警、Logstash 输出插件或第三方规则引擎(如 ElastAlert)结合使用;也可通过 Prometheus + Alertmanager 监控 Filebeat 的运行状态实现“进程/实例存活”告警。
方案一 使用 Elasticsearch Watcher 或 Kibana 告警
- 适用:已在用 Elastic Stack,希望基于日志内容触发告警(如出现 ERROR、错误数阈值等)。
- 步骤
- 配置 Filebeat 输出到 Elasticsearch(或先到 Logstash 再入 ES)。示例:
- 直接到 ES:
- output.elasticsearch.hosts: [“localhost:9200”]
- index: “filebeat-%{+yyyy.MM.dd}”
- 或到 Logstash:
- output.logstash.hosts: [“localhost:5044”]
- 在 Kibana 中创建告警
- 路径:Stack Management → Rules and Connectors → Create rule,选择索引模式(如 filebeat-*),设置查询(如 message 包含 ERROR)、阈值与评估间隔,添加通知方式(如 Email/Webhook/Slack),保存并启用。
- 或用 Watcher API 创建规则(示例每分钟检查是否有 ERROR 并邮件通知):
- PUT /_watcher/watch/filebeat_error_alert
{
“trigger”: { “schedule”: { “interval”: “1m” } },
“input”: {
“search”: {
“request”: {
“indices”: [“filebeat-*”],
“body”: {
“query”: {
“bool”: {
“must”: [
{ “range”: { “@timestamp”: { “gte”: “now-1m” } } },
{ “match”: { “message”: “ERROR” } }
]
}
}
}
}
}
},
“condition”: {
“compare”: { “ctx.payload.hits.total”: { “gt”: 0 } }
},
“actions”: {
“email_admin”: {
“email”: {
“to”: “your-email@example.com”,
“subject”: “Filebeat Alert: ERROR found”,
“body”: “There are ERROR logs in the last 1 minute.”
}
}
}
}
- 说明:Watcher 在 Elasticsearch 6.x 及以上可用(通常随 X-Pack 提供);Kibana 告警为更现代的可视化方式,二者择一或并用。
方案二 使用 Logstash 在输出阶段触发告警
- 适用:已在用 Logstash,希望在数据处理链中直接发邮件/调用 Webhook。
- 步骤
- Filebeat 输出到 Logstash:
- output.logstash.hosts: [“localhost:5044”]
- Logstash 配置示例(检测到 ERROR 即邮件告警):
- input { beats { port => 5044 } }
- filter { }
- output {
if [message] =~ /ERROR/ {
email {
to => “your-email@example.com”
subject => “Logstash Alert: ERROR detected”
body => “Message: %{message}”
via => “smtp”
smtp {
host => “smtp.example.com”
port => 587
user => “your-email@example.com”
password => “your-password”
authentication => “plain”
}
}
}
elasticsearch { hosts => [“localhost:9200”] index => “filebeat-%{+yyyy.MM.dd}” }
}
- 说明:Logstash 适合做内容判定与多通道通知,但邮件发送依赖 SMTP 可达性与凭据配置。
方案三 使用 ElastAlert 对 Elasticsearch 索引做规则告警
- 适用:希望用独立规则引擎,快速编写复杂告警(频率、阈值、黑白名单、复合条件等)。
- 步骤
- 安装 ElastAlert(需 Python 与 pip):pip install elastalert
- 配置 elastalert_config.yaml(指向 ES,指定规则目录等):
- es_host: localhost
- es_port: 9200
- rule_folder: /path/to/rules
- run_every: minutes: 1
- buffer_time: minutes: 15
- 创建规则文件(如 error_frequency.yaml):
- type: frequency
index: filebeat-*
num_events: 1
timeframe: minutes: 1
filter:
- query:
query_string:
query: “ERROR”
alert:
- email
email:
- “your-email@example.com”
- 启动:elastalert --config /path/to/elastalert_config.yaml
- 说明:ElastAlert 会轮询 filebeat-* 索引,满足规则即触发通知,适合快速落地与后期扩展。
方案四 使用 Prometheus + Alertmanager 监控 Filebeat 进程存活
- 适用:需要监控 Filebeat 是否宕机/失联,不关注日志内容本身。
- 步骤
- 部署 Prometheus 与 Alertmanager,在 Prometheus 配置中定义 Filebeat 的存活探针(如基于 up 指标或 Filebeat 暴露的 metrics 端口),并在 Alertmanager 中配置 Email/Slack/Webhook 等接收器。
- 示例规则(Prometheus 规则文件):
- groups:
- name: filebeat_rules
rules:
- alert: FilebeatDown
expr: up{job=“filebeat”} == 0
for: 1m
labels:
severity: critical
annotations:
summary: “Filebeat is down”
description: “Filebeat has been down for more than 1 minute.”
- 启动服务并验证告警通道。
- 说明:该方式侧重“进程/实例可用性”监控,通常与基于日志内容的告警(方案一~三)配合使用。