搭建ELK日志中心详细过程
日志环境搭建准备
现在,读者应该对 ELK
的用途、优势,以及 Elastic Search
、Logstash
和 Kibana
三者间的关系有了一定的了解。接下来笔者将介绍如何从头搭建 ELK
日志环境。在具体实施方面,通常有两种搭建 ELK
日志环境的方法:一种是分别下载、配置并启动独立的 Elastic Search
实例、Logstash
实例和 Kibana
实例,并将三者连接起来;另一种是直接借助 Docker
技术,快速搭建 ELK
日志环境。
笔者比较推荐使用 Docker
部署的搭建方式,使用 Docker
后,不管是使用 docker-compose
分别启动三个实例,还是直接下载和启动 ELK
整套镜像都比较简单。本节介绍使用 docker-compose
一键启动 ELK
日志环境。要先确保本地电脑/服务器/虚拟机中已经安装了 Docker
环境。如果对 Docker
比较熟悉,那么可以直接使用 Docker
的命令行程序来操作镜像;如果之前没有使用过 Docker
,那么需要下载 Docker
和 docker-compose
基础环境。
笔者是在 Ubuntu 20.04
系统下搭建的 ELK
日志环境,Docker
和 docker-compose
安装步骤和注释如下。
-
安装
Docker
安装过程、启动相关的命令和注释如下:
# 1. 通用卸载方法 apt-get remove docker docker-engine docker-ce docker.io ## 2. 更新软件包索引并安装必要的依赖,添加新的软件存储库 apt update apt-get -y install apt-transport-https ca-certificates curl software-properties-common ## 3. 导入存储库的 GPG 密钥 curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | apt-key add - ## 4. 将 Docker APT 存储库添加到系统 add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" ## 5. 安装 Docker apt-get install -y docker-ce ## 6. 启动和关闭 Docker 服务 (Docker 安装后会自动启动) systemctl start docker systemctl stop docker ## 7. 重启 Docker 服务 service docker restart
安装成功后,可以执行如下两个命令进行验证:
## 查看 Docker 版本号 docker version ## 运行 Hello World docker run hello-world
Docker
安装结果分别如图 13-5 和图 13-6 所示。Figure 1. 图13-5 Docker 安装结果1Figure 2. 图13-6 Docker 安装结果2Docker
安装成功。 -
安装
docker-compose
安装步骤及注释如下:
## 下载源文件并命名为 docker-compose curl -L "https://newbee-mall.oss-cn-beijing.aliyuncs.com/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose ## 授予执行权限 chmod +x /usr/local/bin/docker-compose
安装成功后,可以执行如下命令进行验证:
# 验证命令 docker-compose version # 输出结果 Docker Compose version v2.10.2
docker-compose
安装完成。笔者在进行基础环境搭建时,安装
Docker
和docker-compose
都是在root
用户权限下操作的,如果不是root
用户,则要在每行命令前加上sudo
指令。注意事项:在
Ubuntu
系统中安装Docker
,尽量不要使用snap
安装,容易报一些乱七八糟的错误,并且没法解决。
搭建 ELK 日志中心
-
创建基础目录
创建文件夹,用于
Docker
容器挂载,执行的命令及注释如下:## 创建 /data 目录、/data/elk 目录、/data/elk/logstash 目录和 /data/elk/elasticsearch 目录 mkdir -p /data/elk/{logstash,elasticsearch} ## 创建 /data/elk/elasticsearch/data 目录和 /data/elk/elasticsearch/plugins 目录 mkdir /data/elk/elasticsearch/{data,plugins} ## 修改文件夹权限,否则挂载时可能出现问题 chmod -R 777 /data
-
创建配置文件
在
/data/elk
目录下创建docker-compose.yml
文件,用于定义ELK
中的各个实例、网络连接和数据卷挂载,命令如下:vim /data/elk/docker-compose.yml
在
docker-compose.yml
文件中增加如下内容:version: '3.2' services: elasticsearch: image: elasticsearch:7.17.8 # 镜像名称及版本号 container_name: newbee-mall-cloud-elk-elasticsearch # 启动后的容器名称 privileged: true user: root environment: - "cluster.name=elasticsearch" - "discovery.type=single-node" - "ES_JAVA_OPTS=-Xms768m -Xmx768m" - "TZ=Asia/Shanghai" # 时区设置 volumes: - /data/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins # 插件文件挂载 - /data/elk/elasticsearch/data:/usr/share/elasticsearch/data # 数据文件挂载 ports: - 9200:9200 - 9300:9300 logstash: image: logstash:7.17.8 # 镜像名称及版本号 container_name: newbee-mall-cloud-elk-logstash # 启动后的容器名称 privileged: true environment: - TZ=Asia/Shanghai # 时区设置 volumes: - /data/elk/logstash/logstash-server-mode.conf:/usr/share/logstash/ pipeline/logstash.conf # 挂载 Logstash 的配置文件 depends_on: - elasticsearch # Logstash 容器会在 Elastic Search 容器启动后启动 links: - elasticsearch:es # 可以用 ES 访问 Elastic Search 服务 ports: - 4560:4560 kibana: image: kibana:7.17.8 # 镜像名称及版本号 container_name: newbee-mall-cloud-elk-kibana # 启动后的容器名称 privileged: true links: - elasticsearch:es # 可以用 ES 访问 Elastic Search 服务 depends_on: - elasticsearch # Kibana 容器会在 Elastic Search 容器启动后启动 environment: - ELASTICSEARCH_HOSTS=http://es:9200 # 设置访问 Elastic Search 的地址 - I18N_LOCALE="zh-CN" # Kibana 页面(设置中文显示) - TZ=Asia/Shanghai # 时区设置 ports: - 5601:5601
这里定义了
Elastic Search
、Logstash
、Kibana
三个实例的版本、启动参数、依赖关系、端口号等内容。笔者选择的版本是7.17.8
,该版本发布于 2022 年 12 月 9 日。为什么这里需要定义7.17.8
版本号呢?因为默认情况下,Docker
会尝试获取LASTEST
标签,也就是最新版本的镜像文件,如elasticsearch:lastest
,可能会报错。另外,ELK
技术栈一直在不断地更新并发布,为了保证与本书所呈现的效果一致,笔者推荐使用相同的镜像版本,当然,只是推荐,并不强制。在
/data/logstash
目录下创建logstash-server-mode.conf
文件,用于配置Logstash
实例的日志接收模式及基本的过滤特性,命令如下:vim /data/elk/logstash/logstash-server-mode.conf
之后在
logstash-server-mode.conf
文件中增加如下内容:input { # 数据收集配置 (输入) tcp { mode => "server" host => "0.0.0.0" port => 4560 codec => json_lines } } output { # 数据输出配置 elasticsearch { hosts => "es:9200" index => "newbee-mall-cloud-%{+YYYY.MM.dd}" } }
这里指定了
Logstash
实例使用TCP
插件作为数据输入源,并从 4560 端口收集数据。由于日志的格式为JSON
,因此这里定义了codec
为json_lines
,解析时会根据日志内容生成字段,方便后续Elastic Search
分析和存储。同时,通过output
参数将处理后的日志数据输出到Elastic Search
实例中,这里配置了Elastic Search
实例的地址和数据索引。因为当前实例都是在Docker
环境下的,所以即使配置es:9200
,也是可以正常访问的。 -
启动
ELK
到这里基本配置就完成了。接下来执行下面的命令,启动
ELK
容器:## 进入存放 docker-compose.yml 的目录 cd /data/elk ## 启动并在后台运行 docker-compose up -d
如果是第一次启动,则先下载对应的镜像文件,这里需要等待一段时间,如图 13-7 所示。
Figure 3. 图13-7 下载对应的镜像文件如果不是第一次启动,则会瞬间启动
ELK
环境,如图 13-8 所示。Figure 4. 图13-8 启动 ELK 环境 -
查看启动和运行时的日志
ELK
容器启动和运行时的日志可以通过下面这条命令查看:docker-compose logs -f --tail=200
ELK
启动后,可以查看运行时的日志,如图 13-9 所示。如果没有Error
之类的错误日志,一般就没什么问题了。Figure 5. 图13-9 查看运行时的日志图13-10 所示的日志含有不少错误信息,笔者故意写错了一些配置,在启动后就出现了不少问题。当然,
ELK
中的部分实例没有启动成功,ELK
日志中心也就启动失败了。如果有错误日志,就需要仔细检查。Figure 6. 图13-10 包含错误信息的日志 -
验证
除查看日志外,还要实际地访问
ELK
日志中心的实例。打开浏览器,验证Elastic Search
实例,在地址栏中输入ELastic Search
实例所在机器的IP
地址和9200
端口号,比如:http://localhost:9200/?pretty http://192.168.110.11:9200/?pretty
如果页面显示效果与图 13-11 类似,则表示
Elastic Search
实例启动成功。Figure 7. 图13-11 Elastic Search 实例启动成功页面接下来访问
Kibana
页面,在地址栏中输入Kibana
实例所在机器的IP
地址和5601
端口号,比如:http://localhost:5601 http://192.168.110.11:5601
如果页面显示效果与图 13-12 类似,则表示
Kibana
实例启动成功。注意事项:第一次进入
Kibana
页面的时候,页面上会弹出两个按钮:“添加集成” 和 “自己浏览”。单击 “自己浏览” 按钮即可。到这里,
ELK
日志中心的搭建及启动就基本讲解完成了,希望读者能够根据笔者提供的开发步骤顺利地完成本节内容的学习。Figure 8. 图13-12 Kibana 实例启动成功页面