Docker安装ELK
安装Elasticsearch
Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。
拉取ES镜像,
# 这里拉取 7.8.0 版本,最新的去docker仓库里面康
docker pull elasticsearch:7.8.0
docker 拉取镜像成功后, 使用命令docker images查看本地是否有此镜像
创建要挂载的文件与配置信息
mkdir -p /mydata/elasticsearch/config mkdir -p /mydata/elasticsearch/data # 任何地址都可以访问 echo "http.host: 0.0.0.0" >/mydata/elasticsearch/config/elasticsearch.yml
启动Elastic search,推荐一行一行的执行
# -d : 后台运行 # -p : 指定宿主机与docker启动容器的端口映射 # --name : 为 elasticsearch 容器起个别名 # -e : 指定为单节点集群模式 docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.8.0
不推荐执行上面这段,不然嘿嘿嘿
docker run --name elasticsearch -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xms64m -Xmx512m" \ -v /mydata/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml \ -v /mydata/elasticsearch/data:/usr/share/elasticsearch/data \ -v /mydata/elasticsearch/plugins:/usr/share/elasticsearch/plugins \ -d elasticsearch:7.8.0
出现了一个报错说:文件夹未设置所有用户读写执行权限
chmod -R 777 /mydata/elasticsearch/
浏览器输入 http://localhost:9200/ 或者终端输入 curl http://localhost:9200/ 来检查es是否安装成功
设置开机自启动
docker update elasticsearch --restart=always
安装Kibana可视化工具
Kibana 是一种数据可视化和挖掘工具,可以用于日志和时间序列分析、应用程序监控和运营智能使用案例。它提供了强大且易用的功能,例如直方图、线形图、饼图、热图和内置的地理空间支持。此外,它还提供了与 Elasticsearch 的紧密集成,后者是一款流行的分析和搜索引擎,这使得 Kibana 成为了可视化 Elasticsearch 中存储数据的默认之选。
2021 年 1 月 21 日,Elastic NV 宣布,他们将改变软件许可策略,不在 Apache 2.0 版本 (ALv2) 许可下发布 Elasticsearch 和 Kibana 的新版本。相反,将在 Elastic 许可下使用 Elastic 许可或 SSPL 下提供的源代码提供新版本的软件。这些许可证不是开源的,不会为用户提供同样的自由。为了确保开源社区和我们的客户继续拥有一个安全、高质量的完全开源的搜索和分析套件,我们推出了 OpenSearch 项目,该项目是开源 Elasticsearch 和 Kibana 的社区驱动、ALv2 许可的分支。OpenSearch 套件由一个搜索引擎 OpenSearch 和一个可视化和用户界面 OpenSearch 控制面板组成
需要注意的是, kibana 的版本最好与 elasticsearch 保持一致, 避免发生不必要的错误
docker pull kibana:7.8.0
kibana 的镜像已经拉取好了, 接下来启动 kibana 试试页面效果
# 地址为自己虚拟机的ip docker run --name kibana -e ELASTICSEARCH_HOSTS=http://127.0.0.1:9200 -p 5601:5602 -d kibana:7.8.0
可以根据 portainer 查看下容器日志, 或者使用 docker 命令也可以
docker logs kibana
浏览器输入地址 http://localhost:5601/, 启动成功 等待一段时间,不然出不来界面,同样设置开机自启
docker update Kibana--restart=always
安装Logstash
Logstash是具有实时流水线能力的开源的数据收集引擎。Logstash可以动态统一不同来源的数据,并将数据标准化到您选择的目标输出。它提供了大量插件,可帮助我们解析,丰富,转换和缓冲任何类型的数据。
拉取logstash镜像
docker pull logstash:7.8.0
编辑logstash.yml配置文件。目录需对应新增
vim /mydata/logstash/logstash.yml
http.host: "0.0.0.0" xpack.monitoring.elasticsearch.hosts: [ "http://127.0.0.1:9200" ] xpack.monitoring.elasticsearch.username: elastic xpack.monitoring.elasticsearch.password: changeme #path.config: /mydata/logstash/conf.d/*.conf path.config: /mydata/docker/logstash/conf.d/*.conf path.logs: /var/log/logstash
编辑logstash.conf文件,此处先配置logstash直接采集本地数据发送至es
input { syslog { type => "system-syslog" port => 5044 } } output { elasticsearch { hosts => ["127.0.0.1:9200"] # 定义es服务器的ip index => "system-syslog-%{+YYYY.MM}" # 定义索引 } }
编辑本地rsyslog.conf配置增加:
*.* @@127.0.0.1:5044
启动logstash
docker run -d --restart=always --log-driver json-file --log-opt max-size=100m --log-opt max-file=2 -p 5044:5044 --name logstash -v /mydata/logstash/logstash.yml:/usr/share/logstash/config/logstash.yml -v /mydata/logstash/conf.d/:/data/docker/logstash/conf.d/ logstash:7.8.0
测试es接收logstash数据
curl http://localhost:9200/_cat/indices?v
获取到system-syslog-相关日志,则es已能获取来自logstash的数据,kibana中也同步显示数据。
开机自启动
docker update Logstash--restart=always
Docker Compose的方式
version: '3.8' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:7.8.0 container_name: elasticsearch environment: - "cluster.name=elasticsearch" #设置集群名称为elasticsearch - "discovery.type=single-node" #以单一节点模式启动 - "ES_JAVA_OPTS=-Xms512m -Xmx512m" #设置使用jvm内存大小 volumes: - /usr/local/docker/dockercompose/elasticsearch/plugins:/usr/share/elasticsearch/plugins #插件目录 - /usr/local/docker/dockercompose/elasticsearch/data:/usr/share/elasticsearch/data ports: - 9200:9200 - 9300:9300 kibana: image: kibana:7.8.0 container_name: kibana volumes: - /usr/local/docker/dockercompose/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml#挂载配置文件,系统文件:容器内文件 links: - elasticsearch:es #可以用es这个域名访问elasticsearch服务 depends_on: - elasticsearch #kibana在elasticsearch启动之后再启动 environment: - "elasticsearch.hosts=http://es:9200" #设置访问elasticsearch的地址 ports: - 5601:5601 logstash: image: logstash:7.8.0 container_name: logstash volumes: - /usr/local/docker/dockercompose/logstash/logstash.conf:/usr/share/logstash/config/logstash.conf #挂载logstash的配置文件 depends_on: - elasticsearch #kibana在elasticsearch启动之后再启动 links: - elasticsearch:es #可以用es这个域名访问elasticsearch服务 ports: - 4560:4560
在docker-compose.yml同目录下执行
docker-compose up -d
docker ps