当前位置: 首页 > article >正文

使用docker-compose安装ELK(elasticsearch,logstash,kibana)并简单使用

首先服务器上需要安装docker已经docker-compose,如果没有,可以参考我之前写的文章进行安装。

https://blog.csdn.net/a_lllk/article/details/143382884?spm=1001.2014.3001.5502

1.下载并启动elk容器

先创建一个网关,让所有的容器共用此网关,方便容器之间互相通信。

docker network create elk-net

编写docker-compose.yml,我这里的docker-compose版本是2.8.0,可以根据自己安装的docker-compose去调整version。ELK的版本都使用的事8.6.2。

version: '2.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.6.2
    restart: always
    container_name: es
    environment:
      - "ES_JAVA_OPTS=-Xms256m -Xmx512m"
      - "discovery.type=single-node"
      - "ELASTIC_USERNAME=elastic"
      - "ELASTIC_PASSWORD=elastic"
      - "ingest.geoip.downloader.enabled=false"
      - "xpack.security.transport.ssl.enabled=false"
      - "xpack.security.http.ssl.enabled=false"
      - "xpack.security.enabled=true"
      - "bootstrap.memory_lock=true"
      - "cluster.name=es-cluster"
    ports:
      - "9200:9200"
      - "9300:9300"
    privileged: true
    networks:
      - elk-net

  logstash:
    image: docker.io/logstash:8.6.2
    container_name: logstash
    environment:
      - "LS_JAVA_OPTS=-Xmx256m -Xms256m"
    ports:
      - "5044:5044"  # Beats通信
      - "9600:9600"  # API通信
    networks:
      - elk-net
    restart: always
    privileged: true

  kibana:
    image: docker.elastic.co/kibana/kibana:8.6.2
    container_name: kibana
    environment:
      - "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"
      - "SERVER_NAME=kibana"
      - "XPACK_SECURITY_ENABLED=true"
    ports:
      - "5601:5601"
    networks:
      - elk-net
    restart: always
    privileged: true

networks:
  elk-net:
    driver: bridge

将文件放入服务器的任意目录,然后输入以下命令运行。

docker-compose up -d

稍等一会,等镜像下载并创建容器,我这里因为早就下载好了镜像,所以就直接创建了容器。

可以使用docker ps -a查看容器的创建情况,我的容器创建如下图

可以使用ip+端口的形式去查看运行容器的情况,这里注意如果是服务器的话记得打开对于端口。

elasticsearch使用ip+:9200端口去访问

kibana使用ip+:5601去访问。这里注意,如果页面显示"Kibana server is not ready yet."是正常情况,因为目前并没有对elasticsearch做任何配置,kibana是没有检测到es的存在。

logstash暂时没有验证的方式,只要看容器的启动状态是up就行了。

2.配置ELK

2.1.配置elasticsearch

首先在服务器目录创建一个文件夹,来存放容器中的数据。

mkdir -p /usr/local/docker/elasticsearch

然后将容器中的配置文件及data,logs目录复制到当前宿主机指定目录下。

docker cp es:/usr/share/elasticsearch/config /usr/local/docker/elasticsearch/config
docker cp es:/usr/share/elasticsearch/data /usr/local/docker/elasticsearch/data
docker cp es:/usr/share/elasticsearch/logs /usr/local/docker/elasticsearch/logs

进入config目录,有一个elasticsearch.yml文件,这个就是容器的配置文件。

我一般为了保险起见,都会先复制一个没有修改过的配置文件,避免修改配置文件出错时,容器启动报错。

cp elasticsearch.yml  elasticsearch-backup.yml

然后修改配置文件,内容如下:

vim elasticsearch.yml

cluster.name: "es-cluster"
network.host: 0.0.0.0

node.name: node-01
path.data: /usr/share/elasticsearch/data
path.logs: /usr/share/elasticsearch/logs
http.port: 9200
discovery.type: single-node
xpack.security.enabled: true
bootstrap.memory_lock: true

保存并退出,es的配置文件就编辑好了。

2.配置kibana

同样创建一个文件夹,来存放容器中的数据。

mkdir -p /usr/local/docker/kibana

将需要的文件复制到宿主机中。

docker cp kibana:/usr/share/kibana/config /usr/local/docker/kibana/

docker cp kibana:/usr/share/kibana/data /usr/local/docker/kibana/

docker cp kibana:/usr/share/kibana/logs /usr/local/docker/kibana/

进入config目录,编辑名为kibana.yml的配置文件。

vim 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://elasticsearch:9200" ]
elasticsearch.username: "elastic"
elasticsearch.password: "elastic"
monitoring.ui.container.elasticsearch.enabled: true
#界面汉化
i18n.locale: "zh-CN"
##启用或禁用 Kibana 报告功能的角色管理
xpack.reporting.roles.enabled: false

保存并退出,kibana配置文件就算改好了。

3.配置logstash

创建文件夹

mkdir -p /usr/local/docker/kibana

从容器中复制文件夹

docker cp logstash:/usr/share/logstash/pipeline/  /usr/local/docker/logstash/

进入/logstash/pipeline,编辑logstash.conf

input {
  beats {
    port => 5044
  }
}

output {
   elasticsearch {
        hosts => ["http://elasticsearch:9200"]
        user => "elastic"
        password => "elastic"
        index => "logs-%{+YYYY.MM.dd}"
    }
}

3.重新创建容器

上面就对所有容器的配置文件做了处理,然后因为第一次启动的时候没有挂载目录,所以更改的配置配置文件也不会生效,所以我们就需要重新创建一下容器,并将所有编辑的配置文件挂载到容器中去

首先对所有容器进行移除

docker stop es logstash kibana
docker rm es logstash kibana

然后重新编辑上面的docker-compose.yml,将宿主机中的目录挂载到容器中。

version: '2.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:8.6.2
    restart: always
    container_name: es
    volumes:
      - /usr/local/docker/elasticsearch/data:/usr/share/elasticsearch/data  
      - /usr/local/docker/elasticsearch/logs:/usr/share/elasticsearch/logs  
      - /usr/local/docker/elasticsearch/config:/usr/share/elasticsearch/config    
    environment:
      - "ES_JAVA_OPTS=-Xms256m -Xmx512m"
      - "discovery.type=single-node"
      - "ELASTIC_USERNAME=elastic"
      - "ELASTIC_PASSWORD=elastic"
      - "ingest.geoip.downloader.enabled=false"
      - "xpack.security.transport.ssl.enabled=false"
      - "xpack.security.http.ssl.enabled=false"
      - "xpack.security.enabled=true"
      - "bootstrap.memory_lock=true"
      - "cluster.name=es-cluster"
    ports:
      - "9200:9200"
      - "9300:9300"
    privileged: true
    networks:
      - elk-net

  logstash:
    image: docker.io/logstash:8.6.2
    container_name: logstash
    environment:
      - "LS_JAVA_OPTS=-Xmx256m -Xms256m"
    volumes:
      - /usr/local/docker/logstash/pipeline/logstash.conf:/usr/share/logstash/pipeline/logstash.conf:rw  # Logstash配置
    ports:
      - "5044:5044"  # Beats通信
      - "9600:9600"  # API通信
    networks:
      - elk-net
    restart: always
    privileged: true

  kibana:
    image: docker.elastic.co/kibana/kibana:8.6.2
    container_name: kibana
    environment:
      - "ELASTICSEARCH_HOSTS=http://elasticsearch:9200"
      - "SERVER_NAME=kibana"
      - "XPACK_SECURITY_ENABLED=true"
    volumes:
      - /usr/local/docker/kibana/logs:/usr/share/kibana/logs  
      - /usr/local/docker/kibana/data:/usr/share/kibana/data
      - /usr/local/docker/kibana/config:/usr/share/kibana/config 
    ports:
      - "5601:5601"
    networks:
      - elk-net
    restart: always
    privileged: true

networks:
  elk-net:
    driver: bridge

运行命令,还是生成了三个容器。使用上面的ip+端口的方式去验证,发现es可以访问,但是kibana一直在尝试重启,说明配置文件存在问题。

使用log命令查看kibana的启动日志,

docker logs -f kibana

发现es报错了,报错信息如下

"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中直接使用,这里推荐使用账户token的方式去连接es。所以这里需要使用token的方式去连接es。

先进入到es的容器之中,然后运行一下命令,生成对应的token令牌。

进入容器:

docker exec -it es /bin/bash

运行生成令牌命令:

bin/elasticsearch-service-tokens create elastic/kibana default

复制等号后面的token信息

exit;退出容器,然后进入kibana的配置文件存放位置

cd usr/local/docker/kibana/config/

编辑kibana.yml,内容如下:

将之前配置的用户名和密码注释或删除,然后新增elasticsearch.serviceAccountToken,内容为刚才容器中返回的token信息。

然后wq!保存,重启kibana

docker restart kibana

然后使用ip+:5601的方式访问kibana,发现已经可以正常登录使用了,也就是kibana已经成功连接了es。

4.在SpringBoot项目中简单使用

elk的使用方式有很多种,这里简单演示一下整合springBoot。

先创建一个springBoot项目,并导入以下jar包

        <!-- Logback Classic -->
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.2.11</version>
        </dependency>

        <!-- Logstash Logback Encoder -->
        <dependency>
            <groupId>net.logstash.logback</groupId>
            <artifactId>logstash-logback-encoder</artifactId>
            <version>6.3</version>
        </dependency>

然后在application.properties同级目录,新建一个文件,文件名就是"logback-spring.xml"

然后xml内容如下。

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss} - %msg%n</pattern>
        </encoder>
    </appender>
    <!-- 控制台输出 -->
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <layout class="ch.qos.logback.classic.PatternLayout">
                <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %highlight(%-5level) %cyan(%logger{50}.%M.%L) - %highlight(%msg)%n
                </pattern>
            </layout>
        </appender>
        <!-- logback 输出 -->
        <appender name="STASH" class="net.logstash.logback.appender.LogstashTcpSocketAppender">
            <destination>60.204.148.130:5044</destination>
            <encoder class="net.logstash.logback.encoder.LogstashEncoder">
                <includeCallerData>true</includeCallerData>
                <timeZone>UTC</timeZone>
                <customFields>{"server_name":"demo-server"}</customFields>
            </encoder>
        </appender>
        <root level="DEBUG">
            <!-- 将日志发送到Logstash -->
            <appender-ref ref="STDOUT"/>
            <appender-ref ref="STASH"/>
        </root>
</configuration>

然后直接启动springBoot项目,我这边为了演示,level使用的是debug模式,如果觉得debug模式记录太多的话,可以将xml最下面的root level值改为info.

然后访问kibana主页,点击右侧management下面的Stack Management。

进入Stack Management后,选择右边的索引管理。

这里已经成功根据配置文件,新建了一个记录springBoot项目运行日志的索引。

然后可以点击右侧Management下的开发工具。

在左边控制台中输入下面命令,去查看日志的记录清空。

GET /logs-2025.01.16/_search // _search
{
  "sort": [
    {
      "@timestamp": {
        "order": "desc"
      }
    }
  ], 
  "query": {
    "match_all": {}
  }
}


http://www.kler.cn/a/505982.html

相关文章:

  • 电商项目-基于ElasticSearch实现商品搜索功能(三)
  • 《银行保险机构数据安全管理办法》正式实施,分类分级、安全评估共筑安全防线
  • Life Long Learning(李宏毅)机器学习 2023 Spring HW14 (Boss Baseline)
  • 网络编程 - - TCP套接字通信及编程实现
  • HTML中最基本的东西
  • istio-proxy oom问题排查步骤
  • Web基础-分层解耦-IOC与DI入门(具体的是实现步骤)
  • 遥感原理及图像处理
  • 向量数据库Milvus详解
  • day_2_排序算法和树
  • IOS工程师
  • 隧道网络:为数据传输开辟安全通道
  • HttpClient和HttpGet实现音频数据的高效爬取与分析
  • Unity中实现倒计时结束后干一些事情
  • Leetcode 72. 编辑距离 动态规划
  • ASP.NET Core - 配置系统之自定义配置提供程序
  • pytorch小记(六):pytorch中的clone和detach操作:克隆/复制数据 vs 共享相同数据但 与计算图断开联系
  • 【Vue】父组件向子组件传递参数;子组件向父组件触发自定义事件
  • iOS手势shouldBeRequiredToFailByGestureRecognizer 机制
  • vue3 uniapp封装一个瀑布流组件
  • Web开发(二)CSS3基础与进阶
  • Redis从0到1详解(SpringBoot)
  • 面试之《web安全问题》
  • http://noi.openjudge.cn/——4.7算法之搜索——13:Sticks
  • 计算机数据提取与固定
  • Java+Maven+GDAL