搭建ELK日志中心详细过程

日志环境搭建准备

现在,读者应该对 ELK 的用途、优势,以及 Elastic SearchLogstashKibana 三者间的关系有了一定的了解。接下来笔者将介绍如何从头搭建 ELK 日志环境。在具体实施方面,通常有两种搭建 ELK 日志环境的方法:一种是分别下载、配置并启动独立的 Elastic Search 实例、Logstash 实例和 Kibana 实例,并将三者连接起来;另一种是直接借助 Docker 技术,快速搭建 ELK 日志环境。

笔者比较推荐使用 Docker 部署的搭建方式,使用 Docker 后,不管是使用 docker-compose 分别启动三个实例,还是直接下载和启动 ELK 整套镜像都比较简单。本节介绍使用 docker-compose 一键启动 ELK 日志环境。要先确保本地电脑/服务器/虚拟机中已经安装了 Docker 环境。如果对 Docker 比较熟悉,那么可以直接使用 Docker 的命令行程序来操作镜像;如果之前没有使用过 Docker,那么需要下载 Dockerdocker-compose 基础环境。

笔者是在 Ubuntu 20.04 系统下搭建的 ELK 日志环境,Dockerdocker-compose 安装步骤和注释如下。

  1. 安装 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 所示。

    image 2025 04 18 14 53 13 772
    Figure 1. 图13-5 Docker 安装结果1
    image 2025 04 18 14 53 31 110
    Figure 2. 图13-6 Docker 安装结果2

    Docker 安装成功。

  2. 安装 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 安装完成。

    笔者在进行基础环境搭建时,安装 Dockerdocker-compose 都是在 root 用户权限下操作的,如果不是 root 用户,则要在每行命令前加上 sudo 指令。

    注意事项:在 Ubuntu 系统中安装 Docker,尽量不要使用 snap 安装,容易报一些乱七八糟的错误,并且没法解决。

搭建 ELK 日志中心

  1. 创建基础目录

    创建文件夹,用于 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
  2. 创建配置文件

    /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 SearchLogstashKibana 三个实例的版本、启动参数、依赖关系、端口号等内容。笔者选择的版本是 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,因此这里定义了 codecjson_lines,解析时会根据日志内容生成字段,方便后续 Elastic Search 分析和存储。同时,通过 output 参数将处理后的日志数据输出到 Elastic Search 实例中,这里配置了 Elastic Search 实例的地址和数据索引。因为当前实例都是在 Docker 环境下的,所以即使配置 es:9200,也是可以正常访问的。

  3. 启动 ELK

    到这里基本配置就完成了。接下来执行下面的命令,启动 ELK 容器:

    ## 进入存放 docker-compose.yml 的目录
    cd /data/elk
    
    ## 启动并在后台运行
    docker-compose up -d

    如果是第一次启动,则先下载对应的镜像文件,这里需要等待一段时间,如图 13-7 所示。

    image 2025 04 18 15 06 57 598
    Figure 3. 图13-7 下载对应的镜像文件

    如果不是第一次启动,则会瞬间启动 ELK 环境,如图 13-8 所示。

    image 2025 04 18 15 07 23 127
    Figure 4. 图13-8 启动 ELK 环境
  4. 查看启动和运行时的日志

    ELK 容器启动和运行时的日志可以通过下面这条命令查看:

    docker-compose logs -f --tail=200

    ELK 启动后,可以查看运行时的日志,如图 13-9 所示。如果没有 Error 之类的错误日志,一般就没什么问题了。

    image 2025 04 18 15 08 51 128
    Figure 5. 图13-9 查看运行时的日志

    图13-10 所示的日志含有不少错误信息,笔者故意写错了一些配置,在启动后就出现了不少问题。当然,ELK 中的部分实例没有启动成功,ELK 日志中心也就启动失败了。如果有错误日志,就需要仔细检查。

    image 2025 04 18 15 09 16 929
    Figure 6. 图13-10 包含错误信息的日志
  5. 验证

    除查看日志外,还要实际地访问 ELK 日志中心的实例。打开浏览器,验证 Elastic Search 实例,在地址栏中输入 ELastic Search 实例所在机器的 IP 地址和 9200 端口号,比如:

    http://localhost:9200/?pretty
    http://192.168.110.11:9200/?pretty

    如果页面显示效果与图 13-11 类似,则表示 Elastic Search 实例启动成功。

    image 2025 04 18 15 10 41 965
    Figure 7. 图13-11 Elastic Search 实例启动成功页面

    接下来访问 Kibana 页面,在地址栏中输入 Kibana 实例所在机器的 IP 地址和 5601 端口号,比如:

    http://localhost:5601
    http://192.168.110.11:5601

    如果页面显示效果与图 13-12 类似,则表示 Kibana 实例启动成功。

    注意事项:第一次进入 Kibana 页面的时候,页面上会弹出两个按钮:“添加集成” 和 “自己浏览”。单击 “自己浏览” 按钮即可。

    到这里,ELK 日志中心的搭建及启动就基本讲解完成了,希望读者能够根据笔者提供的开发步骤顺利地完成本节内容的学习。

    image 2025 04 18 15 12 17 848
    Figure 8. 图13-12 Kibana 实例启动成功页面