Elastic Stack(原ELK Stack)是Elasticsearch日志分析的基础架构,由Elasticsearch、Logstash、Kibana和Beats组成,覆盖日志采集、处理、存储、分析与可视化全流程。
使用Beats工具轻量级采集日志,避免引入高开销组件。例如,Filebeat配置示例:
filebeat.inputs:
- type: log
enabled: true
paths:
- /var/log/*.log # 采集所有.log文件
output.elasticsearch:
hosts: ["localhost:9200"] # 直接发送至Elasticsearch
若需复杂处理(如多源数据转换),可通过Logstash中转,配置示例如下:
input {
file {
path => "/var/log/nginx/access.log"
start_position => "beginning"
}
}
filter {
grok { # 解析Nginx日志格式
match => { "message" => "%{COMBINEDAPACHELOG}" }
}
date { # 转换时间戳格式
match => ["timestamp", "dd/MMM/yyyy:HH:mm:ss Z"]
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "nginx-access-%{+YYYY.MM.dd}" # 按日期分索引
}
}
request_method、response_code),便于后续查询。timestamp、status_code)使用keyword类型(精确匹配),对长文本(如message)启用fielddata(聚合分析);禁用不必要的_all字段(减少存储开销)。term查询(针对keyword类型字段),如查找status_code=500的错误日志:GET /nginx-access-*/_search
{
"query": {
"term": { "status_code": 500 }
}
}
match查询(针对text类型字段),如查找包含“timeout”的日志:GET /nginx-access-*/_search
{
"query": {
"match": { "message": "timeout" }
}
}
range查询筛选时间或数值范围,如查找2023年10月1日至今的日志:GET /nginx-access-*/_search
{
"query": {
"range": {
"timestamp": {
"gte": "2023-10-01",
"lte": "now"
}
}
}
}
通过聚合函数实现统计分析,如按小时统计请求量、按主机分组计算错误率:
GET /nginx-access-*/_search
{
"aggs": {
"requests_by_hour": { // 按小时分组统计请求数
"date_histogram": {
"field": "timestamp",
"interval": "hour"
}
},
"errors_by_host": { // 按主机分组计算错误率
"terms": { "field": "host.keyword" },
"aggs": {
"error_rate": {
"bucket_script": {
"buckets_path": {
"total": "_count",
"errors": "status_code=500._count"
},
"script": "params.errors / params.total * 100"
}
}
}
}
}
}
结合Kibana的Lens工具,通过拖拽字段快速构建实时图表(如折线图展示错误率趋势、饼图展示主机请求分布),并保存为仪表盘,实现可视化监控。
ES|QL是Elastic的高级查询语言,支持跨索引Join、结构化探索,适用于复杂日志分析场景。例如,关联Nginx访问日志与MySQL错误日志,查找导致订单表满的HTTP请求:
FROM logs-nginx.access-default
WHERE @timestamp > NOW() - 3h AND http.response.status_code >= 500
JOIN logs-mysql.error-default ON logs-mysql.error-default.message LIKE '%table \'orders\' is full%'
通过Kibana Alerting功能,设置阈值告警(如错误日志量激增、HTTP 500错误率超过5%),触发邮件、Slack或PagerDuty通知,实现早期问题预警。例如,创建“Log Spike”告警规则:
document count > 1000(过去5分钟文档数超过1000)利用Elastic的机器学习功能(如Anomaly Detection Job),自动识别日志中的异常模式(如突然的请求量下降、错误率飙升),无需手动配置规则,提升根因分析效率。
Content-Encoding: gzip),减少网络传输开销(提升70%传输效率)。对于不想运维基础设施的团队,可选择Elastic Cloud Serverless(如Logs Essentials套餐),无需管理集群,按实际使用量(写入量、保留时间)计费,适合中小企业快速上手。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。