上海古都建筑设计集团,上海办公室装修设计公司,上海装修公司高质量的内容分享社区,上海装修公司我们不是内容生产者,我们只是上海办公室装修设计公司内容的搬运工平台

elk(elasticsearch+logstash+kibana)搭建日志监控平台

guduadmin12小时前

目录

elk架构原理

安装部署elasticsearch

什么是elasticsearch

创建elasticserch docker容器

 安装部署kibana

什么是Kinana

创建Kibana docker容器

        拉取镜像

        创建配置文件:D:\Programs\docker\kibana\kibana.yml

         创建并运行kibana容器

        验证登录kibana

安装部署logstash

什么是logstash

创建logstash docker容器

创建dockerfile

        创建并运行logstash容器

通过kibana检索日志

​编辑 创建data view

 检索日志

 问题记录


elk架构原理

elk(elasticsearch+logstash+kibana)搭建日志监控平台,第1张

        从上图可以看出,ELK Stack 的基本思路是,Logstash 将监听应用程序日志,将其转换为 JSON 格式并发送到 Elasticsearch。然后将其转换成 Elasticsearch 索引的格式,并存储到 Elasticsearch 中。最后使用 Kibana 对 Elasticsearch 中的数据进行可视化,以便用户进行数据分析和监控。

安装部署elasticsearch

什么是elasticsearch

        Elasticsearch 是一个开源的分布式搜索和分析引擎,建立在 Apache Lucene 基础之上。它提供了一个高性能、可伸缩且具有强大搜索和分析能力的搜索引擎。

        Elasticsearch 设计用于处理大规模数据集,并能够快速地搜索、分析和存储结构化和非结构化数据。它支持实时数据索引和搜索,以及高级搜索功能,包括全文搜索、地理位置搜索、过滤、聚合等。

创建elasticserch docker容器

        拉取镜像

docker pull elasticsearch:8.10.4

elk(elasticsearch+logstash+kibana)搭建日志监控平台,第2张

        修改elasticsearch.yml文件   

        这里我们使用 D:\programs\docker\elasticsearch\elasticsearch.yml 作为映射文件

cluster.name: "docker-cluster"
network.host: 0.0.0.0
http.port: 9200 # 端口号
# bootstrap.memory_lock: false
#----------------------- BEGIN SECURITY AUTO CONFIGURATION -----------------------
#
# The following settings, TLS certificates, and keys have been automatically
# generated to configure Elasticsearch security features on 04-11-2023 14:41:19
#
# --------------------------------------------------------------------------------
# Enable security features
# 开启登陆验证
# xpack.serurity.enbaled : true 必须加上否则启动报错
xpack.security.enabled: true
xpack.security.enrollment.enabled: true
# 允许跨域请求
http.cors.enabled: true
http.cors.allow-origin: "*"
# RaDKza2uS2kQiI3weSun
# Enable encryption for HTTP API client connections, such as Kibana, Logstash, and Agents
# xpack.security.http.ssl: 
  # enabled: true
    # keystore.path: certs/http.p12
    #Enable encryption and mutual authentication between cluster nodes
    # xpack.security.transport.ssl: 
      # enabled: true
        # verification_mode: certificate
          # keystore.path: certs/transport.p12
            # truststore.path: certs/transport.p12
# ----------------------- END SECURITY AUTO CONFIGURATION -------------------------

   创建并启动容器

# 单节点运行
docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node"  -e JVM_OPTS="-Xms512m -Xmx1g" -v D:\programs\docker\elasticsearch\elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml --name els elasticsearch:8.10.4 

     这条命令是用于在 Docker 中运行 Elasticsearch 容器的命令。让我们逐个解析命令的各个部分:

    1. `docker run`: 这是 Docker 命令,用于在容器中运行一个镜像。

    2. `-d`: 这是一个选项,表示以“后台模式”运行容器,即分离模式。

    3. `-p 9200:9200 -p 9300:9300`: 这是一个选项,用于指定容器和主机之间的端口映射。这里规定将容器内的 Elasticsearch 服务的 9200 端口映射到主机的 9200 端口,并将 9300 端口映射到主机的 9300 端口。

    4. `-e "discovery.type=single-node"`: 这是一个选项,用于设置容器的环境变量。这里设置了 Elasticsearch 的 `discovery.type` 参数为 `single-node`,表示以单节点模式运行 Elasticsearch。

    5. `-e JVM_OPTS="-Xms512m -Xmx1g"`: 这是一个选项,用于设置容器的环境变量。这里设置了容器的 JVM 内存选项,`-Xms512m` 指定分配的最小堆内存为 512MB,`-Xmx1g` 指定分配的最大堆内存为 1GB。

    6. `-v D:\programs\docker\elasticsearch\elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml`: 这是一个选项,用于进行主机和容器之间的目录挂载。这里将主机上的 `elasticsearch.yml` 配置文件挂载到容器内的 Elasticsearch 配置目录。

    7. `--name els`: 这是一个选项,用于指定容器的名称为 "els"。

    8. `elasticsearch:8.10.4`: 这是指定要运行的 Docker 镜像,此处为 Elasticsearch 版本为 8.10.4 的镜像。

        通过这个命令,你可以在 Docker 中运行一个 Elasticsearch 容器,并配置一些参数、环境变量和挂载目录。

        重置elasticsearch  密码

         自动重置:密码自动生成

# 在容器中执行
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords auto

         手动重置,需要自己设置每个用户的密码

# 容器内执行
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive

        这里采用的是自动重置方式: 

elk(elasticsearch+logstash+kibana)搭建日志监控平台,第3张

        访问elasticsearch面板

         elk(elasticsearch+logstash+kibana)搭建日志监控平台,第4张

        这里需要使用上图中设置的elasticsearch密码。出现下面界面说明elasticsearch部署成功:

elk(elasticsearch+logstash+kibana)搭建日志监控平台,第5张

 安装部署kibana

什么是Kinana

        Kibana 是一个免费的和开放源代码的数据可视化和分析平台,用于 Elasticsearch。它允许你在 Elasticsearch 上执行高级数据分析和可视化,并与 Elasticsearch 集成来检索、分析和可视化存储在 Elasticsearch 中的数据。

        Kibana 可以用于创建动态的、交互式的图表、仪表盘和报告,帮助开发人员、运维人员和商业分析师更好地理解其数据,并支持多种数据源的数据可视化和分析,包括日志、指标、可视化数据等。

创建Kibana docker容器

        拉取镜像

docker pull kibana:8.10.4

        创建配置文件:D:\Programs\docker\kibana\kibana.yml

#
## ** THIS IS AN AUTO-GENERATED FILE **
##
#
## Default Kibana configuration for docker target
server.host: "0.0.0.0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://192.168.1.13:9200" ]
elasticsearch.username: kibana
elasticsearch.password: IR7j8Z26RIVuWEFgbqip

        由于elastic 账号权限过高,kibana不允许使用elastic用户连接elasticsearch,这里使用kinana账号。密码是上面命令自动生成的。

         创建并运行kibana容器

         使用如下命令创建并运行容器:

docker run -d -p 5601:5601 -v D:\programs\docker\kibana\kibana.yml:/usr/share/kibana/config/kibana.yml --name kibana kibana:8.10.4

        验证登录kibana

elk(elasticsearch+logstash+kibana)搭建日志监控平台,第6张

        这里使用的用户是elastic,密码与登录 http://localhost:9200 的密码相同。至此kibana部署完成。

安装部署logstash

什么是logstash

        Logstash 是一个开源的服务器端数据处理工具,用于收集、处理、转换和传输各种类型的数据。它是弹性堆栈(Elastic Stack)的一部分,与 Elasticsearch、Kibana 和 Beats 一起构成了强大的日志和数据分析解决方案。

        Logstash 可以从多个来源(例如文件、网络、消息队列等)收集数据,并将其转换为统一的格式,然后将数据发送到不同的目标(例如 Elasticsearch、文件、数据库等)。它支持丰富的过滤功能,可以对数据进行处理、加工和增强,以满足特定的需求。在数据传输过程中,Logstash 还可以进行数据转换、编码、解码和压缩等操作。

        Logstash 提供了一个灵活且可扩展的插件架构,使用户可以根据自己的需求轻松地定制数据处理流程。它可以用于日志收集、事件处理、安全分析、业务智能和其他数据处理场景,让用户能够更好地理解和利用其数据,以支持各种用例和业务需求。

创建logstash docker容器

        下载logstash安装包,这里使用ubuntu 容器安装logstash,下载deb版本:Download Logstash Free | Get Started Now | Elastic

        创建目录:D:\Programs\docker\test 并把下载完成后的 logstash-8.10.4-amd64.deb 文件复制到D:\Programs\docker\test目录。同时在该目录中添加logstash.conf配置文件:

input {
  file {
    path => "/app/logs/**/*.log"
    start_position => "beginning"
     sincedb_path => "/dev/null"
    exclude => "*.gz"
  }
}
output {
  elasticsearch {
    hosts => ["192.168.1.13:9200"]
    index => "logs_index"
    user => elastic
    password => RaDKza2uS2kQiI3weSun
  }
}

        配置文件说明:

        input: 指定输入源,logstash会从输入源读取数据。

                file:输入源为文件。

                        path:文件路径,* 是通配符,用于匹配文件路径中的任意字符序列。

                        start_position: 设定为 "beginning",表示从文件的开头开始读取数据。

                        sincedb_path: 指定了 sincedb 文件的路径,但这里设置为 /dev/null,意味着不使用 sincedb 文件来跟踪已读取的文件位置。

                        exclude:排除以 .gz 结尾的文件。

        output:指定输出源,logstash会把数据处理成elasticsearch识别的数据发送给elasticsearch。

                hosts:elasticsearch 应用地址

                index:指定索引,会在elasticsearch中创建

                user:使用elastic 用户

                password:elastic用户密码。

创建dockerfile

from ubuntu
# 创建app目录
RUN mkdir /app/logs -p && mkdir /app/logstash -p
# 复制日志文件到容器
COPY ./logs.tar.gz /app/logs/logs.tar.gz
# 复制logstash的安装包到容器
COPY ./logstash-8.10.4-amd64.deb /app/logstash/logstash-8.10.4-amd64.deb
# 复制logstash.conf 到/app/logstash目录
COPY ./logstash.conf /app/logstash/logstash.conf
# 解压日志文件
RUN tar -xzvf /app/logs/logs.tar.gz -C /app/logs
# 安装logstash
RUN dpkg -i /app/logstash/logstash-8.10.4-amd64.deb
# 容器启动命令
CMD ["/usr/share/logstash/bin/logstash", "-f", "/app/logstash/logstash.conf"]
# 暴露端口9600
EXPOSE 9600

        在logstash的输入源使用的是从本地拷贝到容器的logs.tar.gz的日志文件,logstash的启动配置文件使用的是/app/logstash/logstash.conf。

创建logstash镜像

        在D:\Programs\docker\test 目录执行如下命令,构建本地镜像:

# 创建logstash镜像
docker build -t logstash  -f .\test.conf .

elk(elasticsearch+logstash+kibana)搭建日志监控平台,第7张

        创建并运行logstash容器

        使用如下命令创建logstash容器:

docker run -d -p 9600:9600 -v D:\programs\docker\test\logstash.conf:/app/logstash/logstash.conf --name logstash logstash

        使用docker logs logstash  命令查看logstash  运行日志,如果没有报错,则启动成功。

通过kibana检索日志

        登录kibana控制台,以此从菜单Management -> Data -> Index Management,可以查看logstash配置文件中配置的索引名:logs_index

elk(elasticsearch+logstash+kibana)搭建日志监控平台,第8张 创建data view

通过 主菜单 -> Discover -> Create data View 创建data view:

        第一步:

elk(elasticsearch+logstash+kibana)搭建日志监控平台,第9张

        第二步: 

elk(elasticsearch+logstash+kibana)搭建日志监控平台,第10张

        这一步中创建一个名为logs-data-view匹配logs_index*索引的data view。至此elk日志监控环境创建完成。

 检索日志

        在logstash discover面板中输入:Error,检索包含Error的日志输出:

elk(elasticsearch+logstash+kibana)搭建日志监控平台,第11张

 问题记录

        1、elasticsearch启动报错:Unable to retrieve version information from Elasticsearch nodes. security_exception

[2023-11-05T04:23:18.531+00:00][ERROR][elasticsearch-service] Unable to retrieve version information from Elasticsearch nodes. security_exception
        Root causes:
                security_exception: missing authentication credentials for REST request [/_nodes?filter_path=nodes.*.ver[2023-11-05T04:23:19.259+00:00][INFO ][plugins.screenshotting.chromium] Browser executable: /usr/share/kibana/node_modules/@kbn/screenshotting-plugin/chromium/headless_shell-linux_x64/headless_shell

        问题原因:没有设置elasticsearch 用户名密码。在elasticsearch.yml添加:

        xpack.security.enabled: true

        xpack.security.enrollment.enabled: true

2、kiban启动报错:

FATAL  Error: [config validation of [elasticsearch].username]: value of "elastic" is forbidden.

 Use a servError: [config validation of [elasticsearch].username]: value of "elastic" is forbidden. This is a superuser account that cannot write to system indices that Kibana needs to function. Use a service account token instead. Learn more: https://www.elastic.co/guide/en/elasticsearch/reference/8.0/service-accounts.html
    at ensureValidConfiguration (/usr/share/kibana/node_modules/@kbn/core-config-server-internal/src/ensure_valid_configuration.js:23:11)
    at Server.preboot (/usr/share/kibana/node_modules/@kbn/core-root-server-internal/src/server.js:154:5)
    at Root.preboot (/usr/share/kibana/node_modules/@kbn/core-root-server-internal/src/root/index.js:47:14)
    at bootstrap (/usr/share/kibana/node_modules/@kbn/core-root-server-internal/src/bootstrap.js:97:9)
    at Command. (/usr/share/kibana/src/cli/serve/serve.js:179:5)
 FATAL  Error: [config validation of [elasticsearch].username]: value of "elastic" is forbidden. This is a superuser account that cannot write to system indices that Kibana needs to function. Use a service account token instead. Learn more: https://www.elastic.co/guide/en/elasticsearch/reference/8.0/service-accounts.html

        问题原因:因为"elastic"账号是一个强大的账号,具有非常高的权限,不应该被用于日常操作。kibana.yml配置文件中的elasticsearch user换用kibana或kibana_system

3、kibana登录报错

[2023-11-05T04:50:45.496+00:00][ERROR][plugins.security.user-profile] Failed to activate user profile (retries left: 9): {"error":{"root_cause":[{"type":"version_conflict_engine_exception","reason":"[profile_u_gFwCjbbPdWG_Wgca78NWDZgy5m0yqpqwS2cqmwMPsEQ_0]: version conflict, required seqNo [0], primary term [1]. current document has seqNo [1] and primary term [1]","index_uuid":"CApQk0caTI2SjFj_jAkKLw","shard":"0","index":".security-profile-8"}],"type":"version_conflict_engine_exception","reason":"[profile_u_gFwCjbbPdWG_Wgca78NWDZgy5m0yqpqwS2cqmwMPsEQ_0]: version conflict, required seqNo [0], primary term [1]. current document has seqNo [1] and primary term [1]","index_uuid":"CApQk0caTI2SjFj_jAkKLw","shard":"0","index":".security-profile-8"},"status":409}.

        问题原因:需要使用elastic账号登陆kibana控制台而不是kibana账号。

网友评论