简介
核心组成
ELK由Elasticsearch,Logstash和Kibana三部分组件组成;
Elasticsearch是一个开源分布式搜索引擎,它的特点是:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,它可以对您的日志进行收集,分析,将其存储供以后使用Kibana是一个开源和免费的工具,它可以为Logstash和ElasticSearch提供的日志分析友好的Web界面,可以帮助您汇总,分析和搜索重要数据日志。
四大组件
Logstash:logstash服务器端
Elasticsearch:存储类别日志
Kibana:网络化接口
Logstash转发器:logstash客户端端通过木材服务器网络协议发送日志到logstash服务器
ELK工作流程
在需要收集日志的所有服务上部署logstash,作为logstash代理(logstash shipper)用于监控并过滤收集日志,将过滤后的内容发送到Redis,然后logstash indexer将日志收集在一起并提供全文搜索服务ElasticSearch,可以用ElasticSearch进行自定义搜索通过Kibana来结合自定义搜索进行页面展示。
Docker安装ELK
参考ELK官网
拉取镜像
[root@jjh ~]# docker pull docker.elastic.co/elasticsearch/elasticsearch:7.10.0 [root@jjh ~]# docker pull docker.elastic.co/logstash/logstash:7.10.0 [root@jjh ~]# docker pull docker.elastic.co/kibana/kibana:7.10.0 [root@jjh ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.elastic.co/logstash/logstash 7.10.0 bc71baf6997e 3 weeks ago 843 MB docker.elastic.co/kibana/kibana 7.10.0 da7fcd592595 3 weeks ago 1 GB docker.elastic.co/elasticsearch/elasticsearch 7.10.0 37190fe5beea 3 weeks ago 774 MB
|
运行容器
[root@jjh ~]# docker run -d --name es -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.10.0 [root@jjh ~]# docker run --name es_logstash docker.elastic.co/logstash/logstash:7.10.0 [root@jjh ~]# docker run --name es_kibana -p 5601:5601 -d -e ELASTICSEARCH_URL=http: [root@jjh ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES f017ffdeb0d5 docker.elastic.co/kibana/kibana:7.10.0 "/usr/local/bin/du..." 4 hours ago Up 4 hours 0.0.0.0:5601->5601/tcp es_kibana b7249be98850 docker.elastic.co/logstash/logstash:7.10.0 "/usr/local/bin/do..." 4 hours ago Up 3 hours 5044/tcp, 9600/tcp es_logstash 1242f863cf94 docker.elastic.co/elasticsearch/elasticsearch:7.10.0 "/tini -- /usr/loc..." 4 hours ago Up 3 hours 0.0.0.0:9200->9200/tcp, 0.0.0.0:9300->9300/tcp es
|
修改配置文件
Elasticsearch
进入容器,修改 elasticsearch.yml 文件
[root@1242f863cf94 elasticsearch]# cat config/elasticsearch.yml cluster.name: "docker-cluster" network.host: 0.0.0.0 # 加入跨域配置 http.cors.enabled: true http.cors.allow-origin: "*"
|
访问 http://localhost:9200 ,显示如下:
{ "name" : "1242f863cf94", "cluster_name" : "docker-cluster", "cluster_uuid" : "svVoSL31SwCdpvize03tGA", "version" : { "number" : "7.10.0", "build_flavor" : "default", "build_type" : "docker", "build_hash" : "51e9d6f22758d0374a0f3f5c6e8f3a7997850f96", "build_date" : "2020-11-09T21:30:33.964949Z", "build_snapshot" : false, "lucene_version" : "8.7.0", "minimum_wire_compatibility_version" : "6.8.0", "minimum_index_compatibility_version" : "6.0.0-beta1" }, "tagline" : "You Know, for Search"
|
Logstash
进入容器,修改 logstash.yml 文件
bash-4.2$ cat config/logstash.yml http.host: "0.0.0.0" xpack.monitoring.elasticsearch.hosts: "http://localhost:9200"
|
Kibana
进入容器,修改 logstash.yml 文件
bash-4.4$ cat config/kibana.yml # ** THIS IS AN AUTO-GENERATED FILE ** #Default Kibana configuration for docker target server.name: kibana server.host: "0" elasticsearch.hosts: "http://localhost:9200" monitoring.ui.container.elasticsearch.enabled: true
|
访问 http://localhost:5601 ,显示如下:

记得修改IP地址,不然你会看到访问页面出现如下几个大字:
“kibana server is not ready yet”
ElasticSearch-Head(可选)
参考ElasticSearch-Head
为什么要安装ElasticSearch-Head呢,原因是需要有一个管理界面进行查看ElasticSearch相关信息,用于监控 Elasticsearch 状态的客户端插件,包括数据可视化、执行增删改查操作等。
[root@jjh ~]# docker pull mobz/elasticsearch-head:5 [root@jjh ~]# docker run -d --name es_admin -p 9100:9100 mobz/elasticsearch-head:5
|
访问 http://localhost:9100 ,显示如下:

记得修改页面左上角IP地址,否则集群健康值无法测量