日志收集监控
大约 6 分钟ELK日志收集技术日志收集监控Beats
日志收集监控
日志收集监控概述
日志收集监控是ELK Stack运维管理的重要组成部分,通过对日志收集过程的全面监控,可以确保日志数据的完整性、及时性和准确性。有效的日志收集监控能够帮助运维人员及时发现数据丢失、收集延迟、系统故障等问题,保障整个日志分析平台的稳定运行。
Filebeat监控
1. Filebeat运行状态监控
状态检查命令
# 查看Filebeat状态
sudo systemctl status filebeat
# 查看Filebeat进程
ps aux | grep filebeat
# 查看Filebeat版本信息
filebeat version
内置监控API
# 获取Filebeat统计信息
curl -XGET 'localhost:5066/stats'
# 获取Filebeat指标信息
curl -XGET 'localhost:5066/metrics'
响应示例
{
"beat": {
"cpu": {
"system": {
"ticks": 250,
"time": {
"ms": 1250
}
},
"total": {
"ticks": 500,
"time": {
"ms": 2500
},
"value": 2.5
},
"user": {
"ticks": 250,
"time": {
"ms": 1250
}
}
},
"handles": {
"limit": {
"hard": 1048576,
"soft": 1048576
},
"open": 12
},
"info": {
"ephemeral_id": "abcd1234-5678-efgh-9012-ijkl3456mnop",
"name": "filebeat-host",
"uptime": {
"ms": 3600000
},
"version": "7.15.0"
},
"memstats": {
"gc_next": 20971520,
"memory_alloc": 10485760,
"memory_sys": 31457280,
"memory_total": 104857600,
"rss": 41943040
}
}
}
2. 输入模块监控
日志文件监控
# filebeat.yml
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log
- /var/log/nginx/*.log
- /var/log/app/*.log
fields:
service: "web-server"
fields_under_root: true
ignore_older: 72h
close_inactive: 2h
scan_frequency: 10s
# 启用监控
monitoring.enabled: true
monitoring.elasticsearch:
hosts: ["localhost:9200"]
username: "filebeat_monitoring"
password: "password"
监控关键指标
关键监控指标:
- 文件读取速率(events/s)
- 处理延迟(秒)
- 未处理文件数量
- 错误文件数量
- 内存使用情况
- CPU使用率
3. 输出监控
Elasticsearch输出监控
# filebeat.yml
output.elasticsearch:
hosts: ["localhost:9200"]
index: "filebeat-%{[agent.version]}-%{+yyyy.MM.dd}"
bulk_max_size: 1024
flush_interval: 1s
# 监控配置
worker: 1
compression_level: 0
max_retries: 3
Logstash输出监控
# filebeat.yml
output.logstash:
hosts: ["localhost:5044"]
bulk_max_size: 1024
loadbalance: true
slow_start: true
timeout: 30
输出性能监控
{
"output": {
"events": {
"acked": 10000,
"active": 0,
"batches": 100,
"dropped": 0,
"duplicates": 0,
"failed": 0
},
"read": {
"bytes": 1048576
},
"write": {
"bytes": 2097152
}
}
}
Metricbeat监控
1. 系统指标监控
系统模块配置
# metricbeat.yml
metricbeat.modules:
- module: system
metricsets:
- cpu
- memory
- network
- diskio
- filesystem
- process
- socket
enabled: true
period: 10s
processes: ['.*']
关键系统指标
CPU指标:
- 使用率(%)
- 空闲率(%)
- 系统时间(%)
- 用户时间(%)
内存指标:
- 总内存(bytes)
- 可用内存(bytes)
- 使用率(%)
- 缓存使用(bytes)
磁盘指标:
- 磁盘使用率(%)
- 读写IOPS
- 读写延迟(ms)
- 磁盘空间(bytes)
2. 服务指标监控
Elasticsearch监控
# metricbeat.yml
metricbeat.modules:
- module: elasticsearch
metricsets:
- node
- node_stats
- index
- index_recovery
- index_summary
enabled: true
period: 10s
hosts: ["localhost:9200"]
username: "metricbeat"
password: "password"
监控指标说明
节点指标:
- 集群状态
- 节点角色
- JVM内存使用
- 线程池状态
索引指标:
- 索引大小
- 文档数量
- 搜索性能
- 索引性能
3. 自定义指标监控
自定义模块开发
# 自定义模块配置
metricbeat.modules:
- module: custom
metricsets: ["app_metrics"]
enabled: true
period: 30s
hosts: ["localhost:8080"]
指标收集示例
{
"custom": {
"app_metrics": {
"requests": {
"total": 10000,
"success": 9995,
"error": 5,
"rate": 100
},
"response_time": {
"avg": 50,
"p95": 120,
"p99": 200
},
"concurrent_users": 150
}
}
}
Logstash监控
1. Pipeline监控
内置监控配置
# logstash.yml
http.host: "0.0.0.0"
http.port: 9600
log.level: info
# 启用监控
monitoring.enabled: true
monitoring.elasticsearch.hosts: ["localhost:9200"]
monitoring.elasticsearch.username: "logstash_monitoring"
monitoring.elasticsearch.password: "password"
Pipeline状态监控
# 获取Pipeline统计信息
curl -XGET 'localhost:9600/_node/stats/pipelines'
# 获取插件统计信息
curl -XGET 'localhost:9600/_node/stats/plugins'
监控数据示例
{
"pipelines": {
"main": {
"events": {
"in": 100000,
"out": 99995,
"duration_in_millis": 50000
},
"queue": {
"type": "persisted",
"events_count": 0,
"queue_size_in_bytes": 0,
"max_queue_size_in_bytes": 1073741824
},
"reloads": {
"last_error": null,
"successes": 1,
"last_success_timestamp": "2023-01-01T00:00:00.000Z"
}
}
}
}
2. 插件性能监控
输入插件监控
{
"plugins": {
"inputs": {
"beats": {
"events": {
"in": 50000,
"out": 50000
},
"current_connections": 10,
"accepts": 1000
}
}
}
}
过滤器插件监控
{
"plugins": {
"filters": {
"grok": {
"events": {
"in": 50000,
"out": 49995
},
"matches": 49995,
"failures": 5
}
}
}
}
输出插件监控
{
"plugins": {
"outputs": {
"elasticsearch": {
"events": {
"in": 49995,
"out": 49995,
"duration_in_millis": 25000
},
"documents": {
"successes": 49995,
"failures": 0
}
}
}
}
}
Kibana监控
1. 服务状态监控
状态检查API
# 获取Kibana状态
curl -XGET 'localhost:5601/api/status'
# 获取性能指标
curl -XGET 'localhost:5601/api/metrics'
# 获取应用统计
curl -XGET 'localhost:5601/api/stats'
状态响应示例
{
"name": "kibana",
"uuid": "abcd1234-5678-efgh-9012-ijkl3456mnop",
"version": {
"number": "7.15.0",
"build_hash": "abcdef1234567890"
},
"status": {
"overall": {
"state": "green",
"title": "Green",
"nickname": "Looking great!",
"icon": "success",
"since": "2023-01-01T00:00:00.000Z"
},
"statuses": [
{
"id": "core:elasticsearch",
"state": "green",
"icon": "success",
"message": "Ready",
"since": "2023-01-01T00:00:00.000Z"
}
]
}
}
2. 用户行为监控
访问日志分析
# kibana.yml
# 启用访问日志
logging:
appenders:
file:
type: file
fileName: /var/log/kibana/access.log
layout:
type: json
用户行为指标
关键指标:
- 并发用户数
- 页面访问量
- 查询请求量
- 仪表板加载时间
- 错误请求率
监控告警配置
1. 数据收集延迟告警
Filebeat延迟告警
{
"name": "Filebeat Processing Delay",
"schedule": {
"interval": "1m"
},
"input": {
"search": {
"request": {
"indices": [".monitoring-beats-*"],
"body": {
"query": {
"range": {
"beats_stats.beat.output.events.acked": {
"lt": 100
}
}
},
"aggs": {
"hosts": {
"terms": {
"field": "beats_stats.beat.info.name"
}
}
}
}
}
}
},
"condition": {
"compare": {
"ctx.payload.hits.total": {
"gt": 0
}
}
},
"actions": {
"send_email": {
"email": {
"to": "ops@example.com",
"subject": "Filebeat Processing Delay Detected",
"body": "Host {{ctx.payload.aggregations.hosts.buckets.0.key}} has low event processing rate."
}
}
}
}
2. 数据丢失告警
数据完整性告警
{
"name": "Data Loss Detection",
"schedule": {
"interval": "5m"
},
"input": {
"search": {
"request": {
"indices": [".monitoring-logstash-*"],
"body": {
"query": {
"range": {
"logstash_stats.pipeline.events.out": {
"lt": "logstash_stats.pipeline.events.in"
}
}
}
}
}
}
},
"condition": {
"compare": {
"ctx.payload.hits.total": {
"gt": 0
}
}
},
"actions": {
"send_email": {
"email": {
"to": "admin@example.com",
"subject": "Data Loss Detected in Logstash Pipeline",
"body": "Data loss detected in Logstash pipeline. Please check immediately."
}
}
}
}
性能优化监控
1. 资源使用监控
CPU使用率监控
# 监控CPU使用情况
top -p $(pgrep -f filebeat)
top -p $(pgrep -f metricbeat)
top -p $(pgrep -f logstash)
内存使用监控
# 监控内存使用情况
ps aux | grep -E "(filebeat|metricbeat|logstash)" | awk '{print $2, $4, $11}'
2. 网络性能监控
网络流量监控
# 监控网络流量
iftop -i eth0
nethogs
连接状态监控
# 监控TCP连接状态
netstat -an | grep :9200 | awk '{print $6}' | sort | uniq -c
故障排查
1. 常见问题诊断
数据收集延迟
诊断步骤:
1. 检查Filebeat状态:systemctl status filebeat
2. 查看处理速率:curl localhost:5066/stats
3. 检查日志文件:tail -f /var/log/filebeat/filebeat.log
4. 验证输出连接:telnet elasticsearch-host 9200
数据丢失问题
诊断步骤:
1. 检查sincedb文件:cat /var/lib/filebeat/registry/filebeat/data.json
2. 验证日志文件权限:ls -l /var/log/*.log
3. 检查磁盘空间:df -h
4. 查看错误日志:grep ERROR /var/log/filebeat/filebeat.log
2. 性能瓶颈分析
瓶颈识别方法
分析步骤:
1. 使用top命令识别CPU瓶颈
2. 使用iostat识别磁盘IO瓶颈
3. 使用netstat识别网络瓶颈
4. 分析监控指标识别性能下降趋势
优化建议
优化措施:
- 调整批处理大小
- 优化正则表达式
- 增加工作线程数
- 启用持久化队列
- 优化索引模板
监控最佳实践
1. 监控策略
全面监控原则
监控覆盖:
- 基础设施层面(CPU、内存、磁盘、网络)
- 应用服务层面(进程状态、性能指标)
- 业务逻辑层面(数据完整性、处理延迟)
告警策略
告警分级:
- 紧急:系统宕机、数据丢失
- 重要:性能下降、资源不足
- 一般:配置变更、常规维护
2. 运维规范
定期检查任务
日常检查:
- 检查服务状态
- 查看错误日志
- 验证数据完整性
- 监控资源使用
定期维护:
- 清理过期数据
- 更新配置文件
- 备份重要数据
- 安全补丁更新
文档管理
文档要求:
- 监控配置文档
- 告警处理流程
- 故障排查手册
- 性能优化指南
总结
日志收集监控是保障ELK Stack稳定运行的关键环节。通过建立完善的监控体系,可以及时发现和解决日志收集过程中的各种问题,确保数据的完整性和准确性。在实际应用中,需要根据具体的业务需求和系统特点,制定合适的监控策略,并持续优化监控配置,提升系统的可观测性和运维效率。