外观
ELK 日志系统与 Grafana 监控
约 714 字大约 2 分钟
2025-06-19
简介
ELK 是 Elasticsearch、Logstash、Kibana 三件套的合称,是一套强大的日志收集、处理与展示系统。Grafana 是一款用 Go 开发的数据可视化平台,支持多种数据源,UI 美观且支持告警功能。
软件下载与安装
| 组件 | 下载地址 |
|---|---|
| Elasticsearch | elastic.co/downloads/elasticsearch |
| Kibana | elastic.co/downloads/kibana |
| Logstash | elastic.co/downloads/logstash |
| Filebeat | elastic.co/downloads/beats |
| Grafana | grafana.com/grafana/download |
安装方式参考各组件官方文档,一般解压或 RPM 安装即可。
配置
Filebeat 配置
Filebeat 用于采集日志数据,配置文件示例:
filebeat.prospectors:
- input_type: log
paths:
- /var/www/log/status/monitor.log # 要采集的日志文件
fields:
index: monitor # 自定义字段,用于 Logstash 创建索引
name: "10.10" # 主机标识
output.logstash:
hosts: ["192.168.10.80:5044"] # Logstash 服务地址
paths支持通配符和多文件匹配,也支持 Multiline 多行日志配置。
Logstash 配置
Logstash 负责接收 Filebeat 提交的数据,进行格式化处理后再写入 Elasticsearch。
input {
beats {
port => "5044"
}
}
filter {
grok {
match => [
"message", '%{IPORHOST:remote_ip}:%{NUMBER:remote_port} - %{DATA:user_name} ',
"message", 'time="%{DATA:action_time}" level=%{DATA:level}'
]
remove_field => ["message"]
}
date {
match => [ "timestamp", "dd/MMM/YYYY:HH:mm:ss Z", "UNIX" ]
target => "@timestamp"
}
geoip {
source => "ip"
}
mutate {
convert => { "request_time" => "float" }
}
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "logstash-%{[fields][index]}-%{+YYYY.MM.dd}"
document_type => "%{input_type}"
}
}启动 Logstash 并开启自动重载:
bin/logstash -f first-pipeline.conf --config.reload.automaticKibana 配置
- 访问
http://your-host:5601打开 Kibana Web 界面 - 进入
Management→Index Patterns→ 点击左上角Create Index Pattern - 输入
logstash-monitor-*(与你配置的 index 前缀一致) Time-field name选择@timestamp- 点击左侧
Discover即可看到采集到的数据
Grafana 配置
- Grafana 解压后即可运行
- 在 Data Sources 中添加 Elasticsearch 数据源
- Elasticsearch details 中:
- Pattern 选择
Daily(按天索引,与 Elasticsearch 配置保持一致) - Index 填写
[logstash-monitor-]YYYY.MM.DD - Version 选择
5.x
- Pattern 选择
- 点击 Save,显示绿色即为连接成功
注意事项
按上述默认配置,Elasticsearch 创建的索引中,除时间字段和 GEO 相关字段外,其余字段默认为 analyzed 类型。
如果需要精确匹配(如机器名 "10.80"、含特殊字符的字符串等),默认字段类型会导致搜索不到结果。
解决方案: 向 Elasticsearch 提交自定义 Template。Logstash 启动时默认会创建一个名为 logstash 的 template,可通过以下命令查看:
curl -XGET http://localhost:9200/_template/logstash创建的 template 默认 order=0。根据 ES 模板规则,多个匹配模板会从小到大合并。
新建 mytemp.json:
{
"order": 10,
"version": 50010,
"template": "logstash-*",
"mappings": {
"_default_": {
"properties": {
"bytes": {
"include_in_all": false,
"type": "long"
},
"beat": {
"properties": {
"hostname": {
"type": "keyword",
"index": "true"
}
}
}
}
}
}
}提交模板:
curl -XPUT http://localhost:9200/_template/mytemp -d @/usr/local/logstash-5.0.0/mytemp.json已存在的数据字段格式不会改变,仅对新数据生效。如需对已有数据生效,需删除索引后重新写入。
