简介
基本组件
- Elasticsearch 作为存储和索引这些数据;
- Filebeat 日志文件托运,传送给Logstash;
- Logstash 去插入数据到elasticsearch;
- Kibana 作为展示平台。
基本架构
其中filebeat是作为轻量级的logstash来工作。每台机器上只需要部署filebeat,然后向1台logstash传输即可。
实际相关
服务器1
10.110.1.18 Filebeat+Logstash+Elasticsearch+Kibana
路径1
2 local/elk
filebeat
版本1
2
3
4elasticsearch-6.4.2
kibana-6.4.2
logstash-6.4.2
filebeat-6.4.2
安装
依赖环境
Elasticsearch requires at least Java 8. Specifically as of this writing, it is recommended that you use the Oracle JDK version 1.8.0_131. Java installation varies from platform to platform so we won’t go into those details here. Oracle’s recommended installation documentation can be found on Oracle’s website. Suffice to say, before you install Elasticsearch, please check your Java version first by running (and then install/upgrade accordingly if needed):1
2
3java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.91-b14, mixed mode)
简单说jdk版本必须为1.8以上。1
2
3
4
5
6
7
8
9
10
11cd /usr/src/ && tar -zxvf ./jdk1.8.0_91.tar.gz -C /usr/local
ln -s /usr/local/jdk1.8.0_91 /usr/local/java
echo '
#JDK
############################################################
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
############################################################
' >> /etc/profile
source /etc/profile
java -version
系统参数设定
1 | echo "vm.max_map_count=262144" /etc/sysctl.conf |
如果es启动的时候不生效,可以关闭当前窗口,重新打开。
下载
1 | cd /usr/src |
其中filebeat有些特殊,如果需要读取/var/log下的日志,注意启用用户的权限问题。至于安装方式可以选择RPM方式,启动更为简单,毕竟启动后基本就不会再动。
配置
elasticsearch
配置文件
需要修改的地方,重点是data目录,注意磁盘空间,时间久了会爆满的!!!1
2
3
4
5
6
7#vim /usr/local/elk/elasticsearch/config/elasticsearch.yml
cluster.name: es
node.name: elk-1
path.data: /joyfs/oam/elk/es-data
path.logs: /joyfs/oam/elk/es-logs
network.host: 0.0.0.0
启动
1 | /usr/local/elk/elasticsearch/./bin/elasticsearch -d |
检查
访问9200端口或者浏览器也可以。出现下面信息表示运行正常。1
curl http://127.0.0.1:9200
kibana
配置文件
基本没有什么需要配置的1
2
3
4
5
6
7#vim /usr/local/elk/kibana/config/kibana.yml
server.host: "10.110.1.18"
#切换地图高德,最后加上这一段
tilemap.url: 'http://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'
tilemap.options.minZoom: "1"
tilemap.options.maxZoom: "10"
启动
1 | nohup ./bin/kibana |
访问默认5601端口
filebeat
配置文件
1 |
|
如果需要配置logstash的负载均衡,就需要增加下面的配置1
2
3output.logstash:
hosts: ["localhost:5044", "localhost:5045"]
loadbalance: true
启动
1 | nohup ./bin/filebeat |
检查日志如果不报错就可以。
logstash
配置文件
没啥可修改的,如果愿意的话修改一下日志目录和data目录1
2
3
4#vim /usr/local/elk/logstash/config/logstash.yml
path.data: /joyfs/oam/elk/logstash-data
path.logs: /joyfs/oam/elk/logstash-logs
过滤执行文件
1 | #vim /usr/local/elk/logstash/config/conf.d/joy.conf |
注意nginx日志索引必须为”logstash-xxxx”,否则地图会找不到字段。
配置地图
1 | cd /usr/local/elk/logstash |
注意和配置文件里的GeoLite2-City.mmdb路径保持一致!!!
启动
1 | nohup ./bin/logstash |
kibana画图
visualize->Maps->Coordinate Map
问题整理
1、创建地图时找不到字段
问题分析:
索引格式为[nginx-xxx-]YYYY-MM的日志文件由logstash输出到Elasticsearch;在 elasticsearch 中,所有的数据都有一个类型,什么样的类型,就可以在其上做一些对应类型的特殊操作。geo信息中的location字段是经纬度,我们需要使用经纬度来定位地理位置;在 elasticsearch 中,对于经纬度来说,要想使用 elasticsearch 提供的地理位置查询相关的功能,就需要构造一个结构,并且将其类型属性设置为geo_point,此错误明显是由于我们的geo的location字段类型不是geo_point。
1 | GET nginx_joy_app-2018.10.11/_mapping |
说明创建的index中location字段类型和要求的geo_point不一致。
解决方案:
- 修改ES模板
- logstash配置文件中的output,命名设置为logstash-xxx的index
如果以上方式还是不能解决geo_point的问题,那就碰上事了。
1 | GET _all/_mapping |
input { stdin {} }
output { stdout { codec => rubydebug } }
filter {
date {
match => [“message”,”UNIX_MS”]#message在实际应用中修改为自己的字段
target => “@timestamp”
}
ruby {
code => “event[‘timestamp’] = LogStash::Timestamp.new(event[‘@timestamp’]+ 86060)”
}
ruby {
code => “event[‘@timestamp’]= event[‘timestamp’]”
}
mutate {
remove_field => [“timestamp”]
}
1 | 5.x |
input { stdin {} }
output { stdout { codec => rubydebug } }
filter {
date {
match => [“message”,”UNIX_MS”]
target => “@timestamp”
}
ruby {
code => “event.set(‘timestamp’, event.get(‘@timestamp’).time.localtime + 86060)”
}
ruby {
code => “event.set(‘@timestamp’,event.get(‘timestamp’))”
}
mutate {
remove_field => [“timestamp”]
}
1 | **解决** |
output {
stdout {
codec => rubydebug
}
}
bin/logstash -f test_grok.conf –verbose –debug
1 | 这样直接在前台启动,便可以看到日志输出到终端. |
stream {
upstream logstash {
hash $remote_addr consistent;
server A:4560;
server B:4560;
}
server {
listen 5560;
proxy_pass logstash;
proxy_protocol on;
}
}
`
相关资料
http://grokdebug.herokuapp.com/
https://www.elastic.co/products/beats/filebeat
https://www.elastic.co/products/elasticsearch
https://www.elastic.co/products/logstash
https://www.elastic.co/products/kibana
http://bbotte.com/logs-service/elasticsearch-template-and-mapping/