ELK日志系统和grafana监控显示
简介
ELK是elasticsearch、kibana、logstas组合的简称,是一套强大的日志处理系统, grafana是一款golang开发的数据显示软件,支持多种数据源,UI漂亮,支持报警
软件下载&安装
- es下载地址 https://www.elastic.co/downloads/elasticsearch
- kibana https://www.elastic.co/downloads/kibana
- logstash https://www.elastic.co/downloads/logstash
- filebeat https://www.elastic.co/downloads/beats
- grafana https://grafana.com/grafana/download
安装比较简单,直接安装官方说明装就可以了。
配置
filebeat 主要用来收集数据,配置如下:
filebeat.prospectors:
- input_type: log
paths:
- /var/www/log/status/monitor.log # 要扫描的文件 类似tail -f,也支持多行的配置见:Multiline
fields:
index: monitor #一个自定义配置方便在logstash根据这个字段创建索引
name: "10.10"
output.logstash:
hosts: ["192.168.10.80:5044"] logstash的服务地址
logstash 配置,接收beat提交的数据并做格式化处理再提交给ES存储
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"} #使用geo解析IP得到地理位置信息
mutate {convert => { "request_time" => "float" }} #强制某个字段按数字写入ES
}
output {
elasticsearch {
hosts => [ "localhost:9200" ]
index => "logstash-%{[fields][index]}-%{+YYYY.MM.dd}" #前面提到的index配置在这边根据这个自动创建索引
document_type => "%{input_type}"
}
}
启动命令 bin/logstash -f first-pipeline.conf --config.reload.automatic #config.reload.automatic
在修改first-pipeline.conf
配置文件后自动重新加载配置文件
kibana 访问安装地址的:5601 端口会打开kibana的WEB界面
登录后打开 kibana
--> Management
--> Index Patterns
--> 左上角 Add New
--> 新界面上logstash-\*
修改成 logstash-[前面配置的index]-\*
Time-field name
选择 @timestamp
再点Create
再点左侧的Discover
就能看到数据了
注意点:
按上面的配置 ES创建的索引除了时间字段 GEO的相关字段其他的都是默认的字符的默认是有analyzed的
如果要对字符做精确的搜索比如 “10.80” 这种机器名,这种默认字段是不行的,带有特殊符号的都搜索不到
如果只是有数字字段要处理,用上面mutate的方法强制转换也就能解决不需要用模板处理
这时候需要提交一个新的template给es(logstash在启动的时候默认会给ES创建一个名为logstash的template)
curl -XGET http://localhost:9200/*template/logstash 可以用这个命令查看模板信息 执行这个命令后可以看到默认的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":"string","index": "not_analyzed"} } } } } } } }
执行命令 curl -XPUT http://localhost:9200/_template/mytemp -d '@/usr/local/logstash-5.0.0/mytemp.json'
后面如果要加字段继续执行这个命令就可以了,不过有点要注意,已经存在的数据的字段格式是不会变了, 只对新的数据有效果,如果是处理文本字段的,要删除索引后重新写入的数据才有效果
grafana
golang开发的 解压直接就可以运行,在数据源里面配置ES
Elasticsearch details 这个地方 先选择Pattern 选择Daily按天索引的意思 因为前面ES是选择的按天创建索引,这边一致
然后 [logstash-改成前面对应设置的index-]YYYY.MM.DD
版本选择5.X 点save按钮,如果绿色就对了