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

目录

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 Stack 的基本思路是,Logstash 将监听应用程序日志,将其转换为 JSON 格式并发送到 Elasticsearch。然后将其转换成 Elasticsearch 索引的格式,并存储到 Elasticsearch 中。最后使用 KibanaElasticsearch 中的数据进行可视化,以便用户进行数据分析和监控。

安装部署elasticsearch

什么是elasticsearch

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

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

创建elasticserch docker容器

        拉取镜像

docker pull elasticsearch:8.10.4

        修改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

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

        访问elasticsearch面板

         

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

 安装部署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

        这里使用的用户是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 .

        创建并运行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

 创建data view

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

        第一步:

        第二步: 

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

 检索日志

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

 问题记录

        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.<anonymous> (/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","index":".security-profile-8"},"status":409}.

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

原文地址:https://blog.csdn.net/u012961612/article/details/134231957

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


文章浏览阅读774次,点赞24次,收藏16次。typescript项目中我们使用typings-for-css-modules-loader来替代css-loader实现css modules。1、typings-for-css-modules-loader加载器介绍 Webpack加载器,用作css-loader的替代产品,可动态生成CSS模块的TypeScript类型这句话是什么意思呢?就是编译时处理css文件...
文章浏览阅读784次。react router redux antd eslint prettier less axios_react+antd+redux+less
文章浏览阅读3.9k次,点赞5次,收藏11次。需要删除.security-7索引文件。把在第1步中的被注释的配置打开。之后就是按照提示输入密码。执行bin目录下的文件。_failed to authenticate user 'elastic' against
文章浏览阅读1.2k次,点赞23次,收藏24次。Centos 8 安装es_centos8 yum elasticsearch
文章浏览阅读3.2k次。设置完之后,数据会⾃动同步到其他节点。修改密码时,将第⼀步配置删除,然后重启。单独使⽤⼀个节点⽣成证书;执⾏设置⽤户名和密码的命令。执⾏完上⾯命令以后就可以在。⽂件,在⾥⾯添加如下内容。这个⽂件复制到其他节点下。其中⼀个节点设置密码即可。依次对每个账户设置密码。全部节点都要重启⼀遍。需要在配置⽂件中开启。个⽤户分别设置密码,⽬录下,证书⽂件名为。功能,并指定证书位置。_es设置账号和密码
文章浏览阅读1.9k次,点赞2次,收藏7次。针对多数据源写入的场景,可以借助MQ实现异步的多源写入,这种情况下各个源的写入逻辑互不干扰,不会由于单个数据源写入异常或缓慢影响其他数据源的写入,虽然整体写入的吞吐量增大了,但是由于MQ消费是异步消费,所以不适合实时业务场景。不易出现数据丢失问题,主要基于MQ消息的消费保障机制,比如ES宕机或者写入失败,还能重新消费MQ消息。针对这种情况,有数据强一致性要求的,就必须双写放到事务中来处理,而一旦用上事物,则性能下降更加明显。可能出现延时问题:MQ是异步消费模型,用户写入的数据不一定可以马上看到,造成延时。_mysql同步es
文章浏览阅读3.6w次,点赞48次,收藏44次。【程序员洲洲送书福利-第十九期】《C++ Core Guidelines解析》
文章浏览阅读1.3k次。当我们在开发Vue应用时,经常需要对表单进行校验,以确保用户输入的数据符合预期。Vue提供了一个强大的校验规则机制,通过定义rules规则,可以方便地对表单进行验证,并给出相应的错误提示。_vue ruler校验
文章浏览阅读2k次,点赞16次,收藏12次。Linux内核源码下载地址及方式_linux源码下载
文章浏览阅读1k次。这样在每天自动生成的索引skywalking_log_xxx就会使用上述模版来生成,timestamp会被设置成date类型。然后此时在–>索引管理–>kibana–>索引模式添加skywalking_log*索引时就会有时间字段了。在通过skywalking将日志收集到es后,由于skywalking收集的日志(skywalking_log索引)没有date类型的字段导致在es上再索引模式中没有时间范围的查询。skywalking收集的日志有时间戳字段timestamp,只是默认为long类型。_skywalking timestamp
文章浏览阅读937次,点赞18次,收藏21次。1.初始化git仓库,使用git int命令。2.添加文件到git仓库,两步走:2.1 使用命令,注意,可反复多次使用,添加多个文件;2.2 使用命令,完成。此笔记是我个人学习记录笔记,通过廖雪峰的笔记进行学习,用自己能理解的笔记记录下来,如果侵权,联系删。不存在任何盈利性质,单纯发布后,用于自己学习回顾。
文章浏览阅读786次,点赞8次,收藏7次。上述示例中的 origin 是远程仓库的名称,https://github.com/example/repository.git 是远程仓库的 URL,(fetch) 表示该远程仓库用于获取更新,(push) 表示该远程仓库用于推送更新。你可以选择在本地仓库创建与远程仓库分支对应的本地分支,也可以直接将本地仓库的分支推送到远程仓库的对应分支。将 替换为远程仓库的名称(例如 origin), 替换为要推送的本地分支的名称, 替换为要推送到的远程分支的名称。_git remote 智能切换仓库
文章浏览阅读1.5k次。配置eslint校验代码工具_eslint 实时校验
文章浏览阅读1.2k次,点赞28次,收藏26次。Git入门基础介绍,什么是Git,如何使用Git,以及Git的工作的基本原理
文章浏览阅读2.7k次。基于官方给出的几种不同环境不同的安装方式,本文将会选择在使用.zip文件在Windows上安装Elasticsearch在Linux或macOS上从存档文件安装ElasticsearchInstall Elasticsearch with Docker (此种方式待定)使用Docker安装Elasticsearch。_elasticsearch安装部署windows
文章浏览阅读3.3k次,点赞5次,收藏11次。【Linux驱动】内核模块编译 —— make modules 的使用(单模块编译、多模块编译)_make modules
文章浏览阅读1k次。docker启动es报错_max virtual memory areas vm.max_map_count [65530] is too low, increase to at
文章浏览阅读4.2k次,点赞2次,收藏6次。使用docker单机安装elasticsearch后再安装kibana时找不到es。_unable to retrieve version information from elasticsearch nodes. security_ex
文章浏览阅读1.1k次。日志处理对于任何现代IT系统都是关键部分,本教程专为新手设计,通过详细解释Logstash的三大核心组件,为您展示如何从零开始搭建强大的日志处理系统。您还将学习如何同步MySQL数据到Elasticsearch,并通过一个"Hello World"示例快速入门。无论您是完全的新手还是有一些基础,本教程都将引导您顺利掌握Logstash的基本操作和高级应用。_logstash mysql
文章浏览阅读1.1w次,点赞5次,收藏25次。执行这条指令之后,你的本地项目就与远程Git仓库建立了连接,你就可以开始对你的代码进行版本追踪和协作开发了。使用“git remote add origin”指令,可以轻松地将本地项目连接到远程Git仓库。git remote set-url origin 执行这条指令之后,Git就会将已经添加的名为“origin”的仓库删除。git remote add origin 其中,是你的远程Git仓库的网址。_git remote add origin