Bootstrap

docker 安装ELK 8.17.3

ELK 是指 Elasticsearch、Logstash 和 Kibana 这三个开源软件的组合。

Elasticsearch 是一个分布式的搜索和分析引擎,用于日志的存储,搜索,分析,查询。

Logstash 是一个数据收集、转换和传输工具,用于收集过滤和转换数据,然后将其发送到 Elasticsearch 或其他目标存储中。

Kibana 是一个数据可视化平台,通过与 Elasticsearch 的集成,提供了强大的数据分析和仪表盘功能。

docker拉取:

docker pull elasticsearch:8.17.3
docker pull kibana:8.17.3
docker pull logstash:8.17.3

    创建目录:

    cd /./
    mkdir -p /home/elk/elasticsearch/{conf,data,logs,plugins} /home/elk/kibana/conf /home/elk/logstash/{conf,data,pipeline} 
    chmod 777 /home/elk/elasticsearch/{conf,data} /home/elk/logstash/{conf,data,pipeline}

    创建单独docker网络

    docker network create elknetwork

    修改 Linux 句柄数

    #查看当前最大句柄数
    sysctl -a | grep vm.max_map_count
    #修改句柄数
    vi /etc/sysctl.conf
    vm.max_map_count=262144
    
    #临时生效,修改后需要重启才能生效,不想重启可以设置临时生效
    sysctl -w vm.max_map_count=262144
    

    修改句柄数和最大线程数

    #修改后需要重新登录生效
    vi /etc/security/limits.conf
    
    # 添加以下内容
    *    soft    nofile    65535
    *    hard    nofile    65535
    *    soft    nproc    4096
    *    hard    nproc    4096
    
    # 重启服务,-h 立刻重启,默认间隔一段时间才会开始重启
    reboot -h now

    IK分词器下载

    https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.17.3.zip

    mkdir -p /home/elk/elasticsearch//plugins/ik/
    cd /home/elk/elasticsearch/plugins/ik/
    wget https://release.infinilabs.com/analysis-ik/stable/elasticsearch-analysis-ik-8.17.3.zip
    unzip elasticsearch-analysis-ik-8.17.3.zip

    新建docker网络

    docker network create elknetwork

    创建 docker-compose.yml 文件

    version: "3.7"
    services: 
      # elk日志套件(镜像版本最好保持一致)
      elasticsearch:
        container_name: elasticsearch
        image: elasticsearch:8.17.3
        restart: on-failure
        ports:
          - "9200:9200"
          - "9300:9300"
        environment:
          #单节点设置
          - discovery.type=single-node
          #锁住内存 提高性能
          - bootstrap.memory_lock=true 
          #设置启动内存大小 默认内存/最大内存
          - "ES_JAVA_OPTS=-Xms5g -Xmx15g" 
        ulimits:
          memlock:
            soft: -1
            hard: -1
        volumes:
          #挂载数据文件
          - ./elasticsearch/data:/usr/share/elasticsearch/data
          # 挂载配置文件
          - ./elasticsearch/conf/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
          # 挂载IK中文分词器
          - ./elasticsearch/plugins/ik:/usr/share/elasticsearch/plugins/ik
        networks:
          - elknetwork
      
      kibana:
        container_name: kibana
        image: kibana:8.17.3
        depends_on:
          - elasticsearch
        restart: on-failure
        ports:
          - "5601:5601"
        volumes: 
          - ./kibana/conf/kibana.yml:/usr/share/kibana/config/kibana.yml
        networks:
          - elknetwork
          
      logstash:
        container_name: logstash
        image: logstash:8.17.3
        depends_on:
          - elasticsearch
        restart: on-failure
        ports:
          - "9600:9600"
          - "5044:5044"
        volumes:
          - ./logstash/data/:/usr/share/logstash/data
          - ./logstash/conf/:/usr/share/logstash/conf/
          - ./logstash/pipeline:/usr/share/logstash/pipeline
        networks:
          - elknetwork
         
    #使用自定义的网桥名字
    networks:
      elknetwork: 
        external: true

    编写elasticsearch配置文件

    ./conf/elasticsearch.yml

    #主机ip
    network.host: 0.0.0.0 
    #network.bind_host: 0.0.0.0
    #cluster.routing.allocation.disk.threshold_enabled: false
    #node.name: es-master
    #node.master: true
    #node.data: true
    #允许跨域,集群需要设置
    http.cors.enabled: true 
    #跨域设置
    http.cors.allow-origin: "*" 
    #http.port: 9200
    #transport.tcp.port: 9300
    xpack.security.enabled: false
    xpack.security.http.ssl:
      enabled: false
    xpack.security.transport.ssl:
      enabled: false
    xpack.monitoring.collection.enabled: true
    

    编写kibana配置文件

    ./kibana/conf/kibana.yml

    server.name: "kibana"
    server.host: "0.0.0.0"
    # 注意你的本地IP
    elasticsearch.hosts: ["http://elasticsearch:9200"]
    i18n.locale: "zh-CN"
    # 开启xpack监控
    monitoring.ui.elasticsearch: true
    xpack.monitoring.elasticsearch.hosts: ["http://elasticsearch:9200"]
    xpack.monitoring.collection.interval: 10s

    ./logstash/conf/logstash.yml

    # 允许通过本机所有IP访问
    http.host: "0.0.0.0"
    # 指定使用管道ID
    xpack.management.pipeline.id: ["main"]

    ./logstash/conf/jvm.options

    -Xmx1g
    -Xms5g

    ./logstash/conf/pipelines.yml

     - pipeline.id: main
       path.config: "/usr/share/logstash/pipeline"

    添 微服务应用日志管道配置,在上面指定了管道配置容器目录 /usr/share/logstash/pipeline , 后面启动 Logstash 时会将其挂载至宿主机目录 ./logstash/pipeline,接下来只要在宿主机目录下添加管道配置文件 youlai-log.config 就可以被 Logstash 自动加载生效。

    ./logstash/pipeline/elk-log.config

    input {
     beats {
        port => 5044
        client_inactivity_timeout => 36000
      }
    }
    filter {
       mutate {
            remove_field => ["@version"]
            remove_field => ["tags"]
       }
    }
    output {
      if [appname] == "gateway" {
         elasticsearch {
           hosts => "http://elasticsearch:9200"
           index => "gateway-log"
         }
      }else if [appname] == "auth" {
         elasticsearch {
           hosts => "http://elasticsearch:9200"
           index => "auth-log"
         }
      }else if [appname] == "adm" {
         elasticsearch {
           hosts => "http://elasticsearch:9200"
           index => "adm-log"
         }
      }else if [appname] == "project" {
         elasticsearch {
           hosts => "http://elasticsearch:9200"
           index => "project-log"
         }
      }else if [appname] == "product" {
         elasticsearch {
           hosts => "http://elasticsearch:9200"
           index => "product-log"
         }
      }
      stdout {}
    }

    运行

    cd /home/elk
    docker compose up -d
    

    问题

    命令会打印 elastic 用户密码和 Kibana 的注册令牌

    docker run --name es01 --net elastic -p 9200:9200 -it -m 6GB -e "xpack.ml.use_auto_machine_memory_percent=true" docker.elastic.co/elasticsearch/elasticsearch:8.17.0

    复制生成的 elastic 密码和注册令牌。这些凭据仅在您首次启动 Elasticsearch 时显示。您可以使用以下命令重新生成凭据。

    docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic
    docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

    重新生成Kibana 启动时,它会向终端输出一个唯一的生成链接。要访问 Kibana,请在 Web 浏览器中打开此链接

    docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

    使用您在启动 Elasticsearch 时生成的密码以 elastic 用户身份登录 Kibana。

    要重新生成密码,请运行

    docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elastic

    在生产中使用 Docker 镜像

    以下要求和建议适用于在生产环境中在 Docker 中运行 Elasticsearch。

    将 vm.max_map_count 设置为至少 262144

    对于生产用途,vm.max_map_count 内核设置必须设置为至少 262144

    如何设置 vm.max_map_count 取决于您的平台。

    Linux

    要查看 vm.max_map_count 设置的当前值,请运行

    grep vm.max_map_count /etc/sysctl.conf
    vm.max_map_count=262144

    要在实时系统上应用设置,请运行

    sysctl -w vm.max_map_count=262144

    要永久更改 vm.max_map_count 设置的值,请更新 /etc/sysctl.conf 中的值。

    ;