ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。
Elasticsearch是实时全文搜索和分析引擎,提供搜集、分析、存储数据三大功能;是一套开放REST和JAVA API等结构提供高效搜索功能,可扩展的分布式系统。它构建于Apache Lucene搜索引擎库之上。
Logstash是一个用来搜集、分析、过滤日志的工具。它支持几乎任何类型的日志,包括系统日志、错误日志和自定义应用程序日志。它可以从许多来源接收日志,这些来源包括 syslog、消息传递(例如 RabbitMQ)和JMX,它能够以多种方式输出数据,包括电子邮件、websockets和Elasticsearch。
Kibana是一个基于Web的图形界面,用于搜索、分析和可视化存储在 Elasticsearch指标中的日志数据。它利用Elasticsearch的REST接口来检索数据,不仅允许用户创建他们自己的数据的定制仪表板视图,还允许他们以特殊的方式查询和过滤数据
一、参考资料官网地址
https://github.com/medcl/elasticsearch-analysis-ik/releases
https://www.cnblogs.com/William-Guozi/p/elk-docker.html
https://www.cnblogs.com/peterpoker/p/9573720.html
https://www.cnblogs.com/just-coder/p/11017050.html
二、下载相关的docker镜像 docker pull elasticsearch:7.6.0 docker pull kibana:7.6.0 docker pull logstash:7.6.0 docker pull filebeat:7.6.0 docker pull mobz/elasticsearch‐head:5 三、搭建ELK日志系统创建一个elk文件夹, 后面的配置文件都放在里面
mkdir /home/elk 3.1 安装elasticsearch创建一个elasticsearch.yml文件
vi /home/elk/elasticsearch.yml在里面添加如下配置:
cluster.name: "docker-cluster" network.host: 0.0.0.0 # 访问ID限定,0.0.0.0为不限制,生产环境请设置为固定IP transport.host: 0.0.0.0 # elasticsearch节点名称 node.name: node-1 # elasticsearch节点信息 cluster.initial_master_nodes: ["node-1"] # 下面的配置是关闭跨域验证 http.cors.enabled: true http.cors.allow-origin: "*"创建并启动elasticsearch容器
docker run -di -p 9200:9200 -p 9300:9300 --name=elasticsearch -v /home/elk/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml elasticsearch:7.6.0之后通过9200端口在浏览器上范围,有信息返回则成功
注意:如果需要添加插件将容器的插件目录映射到实际的路径中或者通过命令(如安装ik分词器:docker cp ik elasticsearch:/usr/share/elasticsearch/plugins/)将其拷贝到容器中
可能遇到的问题 1.启动成功后,过了一会就停止这与我们刚才修改的配置有关,因为elasticsearch在启动的时候会进行一些检查,比如最多打开的文件的个数以及虚拟内存
区域数量等等,如果你放开了此配置,意味着需要打开更多的文件以及虚拟内存,所以我们还需要系统调优。
修改/etc/security/limits.conf ,添加如下内容:
* soft nofile 65536 * hard nofile 65536nofile是单个进程允许打开的最大文件个数 soft nofile 是软限制 hard nofile是硬限制
修改/etc/sysctl.conf,追加内容
vm.max_map_count=655360限制一个进程可以拥有的VMA(虚拟内存区域)的数量
执行下面命令 修改内核参数马上生效,之后重启服务器和docker服务
sysctl ‐p 2. 启动失败显示如下日志信息 ERROR: [1] bootstrap checks failed [1]: the default discovery settings are unsuitable for production use; at least one of [discovery.seed_hosts, discovery.seed_providers, cluster.initial_master_nodes] must be configured这个是由于elasticsearch7是集群多节点的版本,需要在elasticsearch.yml中添加如下配置:
# elasticsearch节点名称 node.name: node-1 # elasticsearch节点信息 cluster.initial_master_nodes: ["node-1"] 3. 外网上已经可以通过9200端口推送数据和查询数据,但是后面安装的kibana等组件却无法连查看日志发现如下错误
error=>"Elasticsearch Unreachable: [:9200/][Manticore::...这个问题通常是由于安装在一台机器上的docker容器,防火墙开启的状态下,docker容器内部无法访问宿主机服务(能够访问非宿主机的其他局域网计算机的服务),解决方法:
配置防火墙规则firewall-cmd --zone=public --add-port={port}/tcp --permanent,并重载防火墙规则firewall-cmd --reload
启动容器时使用--net host模式(docker的4种网络模式:https://www.jianshu.com/p/22a7032bb7bd)
关闭防火墙
安装elasticsearch‐head插件做调试使用(可以不安装) docker run ‐di ‐‐name=es-head ‐p 9100:9100 mobz/elasticsearch‐head:5启动成功后访问9100端口即可使用界面化进行管理elasticsearch。
在本地电脑上安装下载head插件:https://github.com/mobz/elasticsearch-head
将grunt安装为全局命令 。Grunt是基于Node.js的项目构建工具。它可以自动运行你所 设定的任务
npm install ‐g grunt‐cli
安装依赖
npm install
启动
grunt server打开浏览器,输入 :9100
3.2 安装kibana