ELK:使用docker搭建elk平台
1.安装ElasticSearch
1.docker pull elasticsearch //拉取镜像
2.find /var/lib/docker/overlay2/ -name jvm.options //找到es启动时的jvm配置
3.vim /var/lib/docker/overlay2/988da6b3d15ba2cd936752ad4b4f624b45107b34bbb5b2e76f1dc64c4a1dd172/diff/etc/elasticsearch/jvm.options
说明:es5.0以后默认启动时会使用2G内存,所以会导致启动失败,这里我们修改为512m或者更低
参考:https://blog.csdn.net/qq_35022052/article/details/81584014
4.docker run -d -p 9200:9200 -p 9300:9300 --name myelasticsearch -e "discovery.type=single-node" elasticsearch //启动es
ps:当然也可以使用参数限制
docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name myelasticsearch elasticsearch
2.安装Kibana
1.docker pull kibana //拉取镜像
2.docker run -d -p 5601:5601 --name mykibana --link myelasticsearch -e ELASTICSEARCH_URL=tanghu.tk:9200 kibana
使用link参数,会在kibana容器hosts文件中加入elasticsearch ip地址
,这样我们就直接通过定义的name来访问es服务了。
link后面的参数名是我们刚刚启动es时自定义的名称
3.安装Logstash
1.docker pull logstash
2.新建一个配置文件
input { beats { host => "http://tanghu.tk" port => "5044" } } filter { if [fields][doc_type] == 'order' { grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{JAVALOGMESSAGE:msg}" } } } if [fields][doc_type] == 'customer' { # 这里写两个一样的grok,实际上可能出现多种不同的日志格式,这里做个提示而已,当然如果是相同的格式,这里可以不写的 grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:level} %{JAVALOGMESSAGE:msg}" } } } } output { stdout { codec => rubydebug } elasticsearch { hosts => [ "http://tanghu.tk:9200" ] index => "%{[fields][doc_type]}-%{+YYYY.MM.dd}" } }
关于logstash的数据来源有多种beats 是自身,通过logback传输到节点上
还有file直接拉去本地文件,以及redis、es等等
详见:https://www.elastic.co/guide/en/logstash/current/input-plugins.html
3.docker run --rm -it --name mylogstash --link myelasticsearch -d -v /myfile/config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf logstash