docker-compose 快速搭建日志平台

部署ELK

  • 创建部署目录

    mkdir -p /data/apps/elk/{elasticsearch,kibana,logstash}
    mkdir -p /data/apps/elk/elasticsearch/{data,plugins,logs,cert}
    chmod 777 elasticsearch kibana logstash -R

  • 创建logstash配置文件

    cd /data/apps/elk/
    touch /data/apps/elk/logstash/logstash.conf

  • 配置logstash.conf,如果只用filebeat采集,logstash可以不用部署

    input {
    tcp {
    mode => "server"
    host => "0.0.0.0"
    port => 4560
    }
    }

    output {
    elasticsearch {
    hosts => ["elasticsearch:9200"]
    index => "logstash-%{+YYYY.MM.dd}"
    }
    stdout { codec => rubydebug }
    }

  • 创建和配置elasticsearch.yml

    touch /data/apps/elk/elasticsearch/config/elasticsearch.yml

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

    这里等生成好证书再开启配置

    #xpack.security.enabled: true
    #xpack.security.transport.ssl.enabled: true
    #xpack.security.transport.ssl.verification_mode: certificate
    #xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
    #xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
    #xpack.security.transport.ssl.truststore.type: PKCS12
    #xpack.security.transport.ssl.keystore.type: PKCS12

  • 创建和配置kibana.yml

    server.name: kibana
    server.host: "0"
    elasticsearch.hosts: [ "http://elasticsearch:9200" ]
    xpack.monitoring.ui.container.elasticsearch.enabled: true

    设置中文

    i18n.locale: zh-CN

    #elasticsearch中用户名和密码,这也里要等ES开启xpack再启用
    #elasticsearch.username: "kibana"
    #elasticsearch.password: "****************"

  • 创建docker-compose.yml文件

    touch /data/apps/elk/docker-compose.yml

  • 根据实际情况配置 docker-compose.yml,这是最终版

    version: '3.5'
    services:
    elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2
    container_name: elasticsearch
    privileged: true
    user: root
    environment:
    #设置集群名称为elasticsearch
    - cluster.name=elasticsearch
    #以单一节点模式启动
    - discovery.type=single-node
    #设置使用jvm内存大小
    - ES_JAVA_OPTS=-Xms512m -Xmx512m
    volumes:
    - /data/apps/elk/elasticsearch/plugins:/usr/share/elasticsearch/plugins
    - /data/apps/elk/elasticsearch/data:/usr/share/elasticsearch/data
    - /data/apps/elk/elasticsearch/logs:/usr/share/elasticsearch/logs
    - /data/apps/elk/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    #- /data/apps/elk/elasticsearch/cert/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
    ports:
    - 9200:9200
    - 9300:9300
    networks:
    - elk-network

    复制代码
    logstash:
      image: docker.elastic.co/logstash/logstash:7.6.2
      container_name: logstash
      ports:
         - 4560:4560
      privileged: true
      environment:
        - TZ=Asia/Shanghai
      volumes:
        #挂载logstash的配置文件
        - /data/apps/elk/logstash/logstash.conf:/usr/share/logstash/pipeline/logstash.conf 
      depends_on:
        - elasticsearch 
      links:
        #可以用es这个域名访问elasticsearch服务
        - elasticsearch:es 
      networks:
        - elk-network
    
    kibana:
      image: docker.elastic.co/kibana/kibana:7.6.2
      container_name: kibana
      ports:
          - 5601:5601
      privileged: true
      links:
        #可以用es这个域名访问elasticsearch服务
        - elasticsearch:es 
      depends_on:
        - elasticsearch 
      environment:
        #设置访问elasticsearch的地址
        - elasticsearch.hosts=http://elasticsearch:9200
      volumes:
        #挂载kibana的配置文件
        - /data/apps/elk/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml
      networks:
        - elk-network

    networks:
    elk-network:
    driver: bridge

  • 启动docker-compose

    #启动
    docker-compose up -d

    #关闭
    docker-compose down

    #重启某个容器
    docker-compose restart logstash

安装获取elastic-certificates.p12文件

  • 进es容器中操作

    docker exec -it elasticsearch /bin/bash

  • 执行下面命令,生成新文件 elastic-stack-ca.p12文件,系统会提示生成名称和密码,可直接回车跳过,无需输入

    ./bin/elasticsearch-certutil ca

  • 执行下面命令,elastic-certificates.p12文件(所需文件),系统会提示生成名称和密码,可直接回车跳过,无需输入

    ./bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12

  • 拷贝文件至宿主机,选退出容器,进入宿主机再操作

    docker cp es:/usr/share/elasticsearch/elastic-certificates.p12 /data/apps/elk/elasticsearch/cert/
    chmod 755 /data/apps/elk/elasticsearch/cert/elastic-certificates.p12

ES启用xpack配置

  • 修改配置elasticsearch.yml,取消以下注释

    xpack.security.enabled: true
    xpack.security.transport.ssl.enabled: true
    xpack.security.transport.ssl.verification_mode: certificate
    xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
    xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/elastic-certificates.p12
    xpack.security.transport.ssl.truststore.type: PKCS12
    xpack.security.transport.ssl.keystore.type: PKCS12

  • 修改docker-compose.yml配置,取消20行注释

    • /data/apps/elk/elasticsearch/cert/elastic-certificates.p12:/usr/share/elasticsearch/config/elastic-certificates.p12
  • 重启es

    docker-compose restart elasticsearch

  • 这时可以看到kibana已经无法连接es

elasticsearch 帐号密码设置

  • 进入 elasticsearch 容器

    docker exec -it elasticsearch /bin/bash

  • 生成密码,自行选择自动生成或者手动设置

    #自动生成密码
    ./bin/elasticsearch-setup-passwords auto
    #手动设置密码
    ./bin/elasticsearch-setup-passwords interactive

  • 我这里选择自动生成,生成好的密码注意保存

    [root@9e4a89f00a05 elasticsearch]# ./bin/elasticsearch-setup-passwords auto
    Initiating the setup of passwords for reserved users elastic,apm_system,kibana,logstash_system,beats_system,remote_monitoring_user.
    The passwords will be randomly generated and printed to the console.
    Please confirm that you would like to continue [y/N]y

    Changed password for user apm_system
    PASSWORD apm_system = 此处有明文密码**

    Changed password for user kibana
    PASSWORD kibana = 此处有明文密码**

    Changed password for user logstash_system
    PASSWORD logstash_system = 此处有明文密码**

    Changed password for user beats_system
    PASSWORD beats_system = 此处有明文密码**

    Changed password for user remote_monitoring_user
    PASSWORD remote_monitoring_user = 此处有明文密码**

    Changed password for user elastic
    PASSWORD elastic = IGnVa7HrYCzReBFWOCmX

修改kibana配置,添加ES的账号和密码

  • kibana/kibana.yml

    #elasticsearch中用户名和密码
    elasticsearch.username: "kibana"
    elasticsearch.password: "************"

  • 重启kibana,使用配置生效

    docker-compose restart kibana

kibana

  • 使用elastic用户登录kibana

输入http://你的IP:5601/,访问Kibana web界面。点击左侧设置,进入Management界面

  • 这里建议使用Nginx做七层反向代理,使用域名http://elk.xxxx.com访问ELK
复制代码
server {  
    listen 80;
    server_name elk.xxxx.com;
    charset utf-8;
    location = /favicon.ico { access_log off; log_not_found off; }
    location / {
        proxy_pass http://你的IP:5601;
        proxy_redirect off;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    access_log  /data/logs/elk.xxxx.com.access.log main;
    error_log  /data/logs/elk.xxxx.com.error.log;
}

使用filebeat采集Nginx日志和后台业务日志

  • 安装filebeat

    curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.6.2-x86_64.rpm

    rpm -vih filebeat-7.6.2-x86_64.rpm

  • 配置filebeat.yml

    #logging.level: debug
    filebeat.inputs:
    - type: log
    enabled: true
    paths:
    - /data/wwwlogs/*access.log
    json.keys_under_root: true
    json.add_error_key: true
    index: "nginx-access-%{+yyyy.MM.dd}"

    复制代码
      # 如果有其他日志要采集,参考以上配置,继续追加即可

    name: 可以填写你的主机名

    #开启子配置文件查看,在这个目录里新增子配置文件会自动加载,不需要重启filebeat
    filebeat.config.inputs:
    enabled: true
    path: ${path.config}/inputs.d/*.yml
    reload.enabled: true
    reload.period: 10s

    output.elasticsearch:
    hosts: ["elasticsearch:9200"]
    protocol: "http"
    # 开启认证后filebeat也要配置es密码
    username: "elastic"
    password: "************"
    processors:

    • drop_fields:
      fields: ["log.offset", "input", "agent.type", "agent.ephemeral_id", "agent.id", "agent.version", "agent.name", "ecs", "host"]

    close_older: 30m # 如果文件在某个时间段内没有发生过更新,则关闭监控的文件handle。默认1h
    force_close_files: false # 这个选项关闭一个文件,当文件名称的变化。只在window建议为true
    close_inactive: 1m
    close_timeout: 3h
    clean_inactive: 72h
    ignore_older: 70h

  • 如果需要新增filebeat配置则添加- input_type: log段配置即可

  • 启动filebeat

    systemctl start filebeat.service

  • 设置开机启动

    systemctl enable filebeat.service

相关推荐
矛取矛求9 分钟前
版本控制器Git ,Gitee如何连接Linux Gitee和Github区别
linux
小狗爱吃黄桃罐头1 小时前
串口自动化断电测试
运维·python·自动化
你喜欢喝可乐吗?1 小时前
在 Ubuntu 中用 Docker 安装 RAGFlow
运维·服务器·人工智能·ubuntu·docker
程序员阿明2 小时前
WinSCP使用普通用户登录切换到root用户的方法
linux·github
探模之翼2 小时前
《实战指南:基于Linux环境部署与应用Milvus向量数据库》
linux·数据库·milvus
林政硕(Cohen0415)3 小时前
Linux驱动开发进阶 - 文件系统
linux·驱动开发·文件系统
ken22323 小时前
ssh 多重验证的好处:降低密钥长度,动态密码
运维·服务器·ssh
niuTaylor3 小时前
Linux驱动开发实战之SRIO驱动(一)
linux·c语言·开发语言·驱动开发
qq_8639093 小时前
通过调整相邻分区实现Linux根分区扩容(ext4文件系统)
linux·运维·服务器
DeepSeek+NAS4 小时前
耘想Docker版Linux NAS的安装说明
linux·docker·容器·nas·winnas·安卓nas·小米nas