ELK日志系统和grafana监控显示

简介

ELK是elasticsearch、kibana、logstas组合的简称,是一套强大的日志处理系统, grafana是一款golang开发的数据显示软件,支持多种数据源,UI漂亮,支持报警

软件下载&安装


安装比较简单,直接安装官方说明装就可以了。

配置

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按钮,如果绿色就对了

资源

官网open in new window
grafana官方demoopen in new window