• docker使用filebeat+elk采集日志


    继上一篇文章《使用docker安装elk》后,我乘胜追击,想一鼓作气的完成采集日志的功能,结果在这栽了跟头,原因是因为我对docker理解不够深刻。这一篇文章讲的是使用filebeat采集日志发送到elk(可以假想成多个服务器采集日志然后发送到elk中心去)

     配置要求

            Linux centos

            elk(我使用的是docker安装的elk,可能和普通的安装的有些不一样)

     1.docker拉取filebeat

    docker pull docker.elastic.co/beats/filebeat:7.1.1

    2.配置filebeat

    在usr/local/filebeat(任意选择在哪个文件夹下下载)下下载filebeat.docker.yml

    wget https://raw.githubusercontent.com/elastic/beats/8.3/deploy/docker/filebeat.docker.yml

    我们在宿主机上配置好filebeat后挂载到docker filebeat(待会启动的容器)上,想要更改配置就可以直接在filebeat.docker.yml上更改然后重启容器就行

    filebeat.docker.yml配置内容

    1. filebeat.config:
    2. modules:
    3. path: ${path.config}/modules.d/*.yml
    4. reload.enabled: false
    5. filebeat.autodiscover:
    6. providers:
    7. - type: docker
    8. hints.enabled: true
    9. processors:
    10. - add_cloud_metadata: ~
    11. # 日志输入配置
    12. filebeat.inputs:
    13. - type: log
    14. enabled: true
    15. paths:
    16. # 需要收集的日志所在的位置,可使用通配符进行配置
    17. - /usr/share/filebeat/logs/*
    18. output.elasticsearch:
    19. hosts: '123.105.121.12:9200'
    20. username: 'elastic'
    21. password: 'changeme'
    22. #output.logstash:
    23. # hosts: '123.105.121.12:5044'

    我在这还配置了输出到logstah,不过output只能有一个,所以要使用elasticsearch作为输出目的就要注释掉logstash的配置,我这两个都试过,都能用,设置elasticsearch的话elk就不用配置logstash了,用logstash的话还得配置logstash,待会再讲配置logstash的方式

    如果elasticsearch没有密码就不用写 username和password

    此外,filebeat.inputs下的paths要指向容器内的路径,然后启动容器的时候挂载到宿主机存放日志的路径

    3.启动filebeat

    1. docker run --restart=always --name filebeat -d --user=root
    2. --volume="/usr/local/filebeat/filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro"
    3. --volume="/var/lib/docker/containers:/var/lib/docker/containers:ro"
    4. --volume="/var/run/docker.sock:/var/run/docker.sock:ro"
    5. --volume="/usr/local/mysql/logs:/usr/share/filebeat/logs" docker.elastic.co/beats/filebeat:7.1.1 filebeat

    --restart: 指定重启后自动运行容器

    --name: 设置容器名

    -d: 后台运行

    --user: 指定运行用户

    --volume

    ① 绑定一个卷,/usr/local/filebeat/filebeat.docker.yml(我们刚刚创建的配置文件):/usr/share/filebeat/filebeat.yml(在容器内的配置文件):ro(只读)

    ② 意思就是/usr/share/filebeat/filebeat.yml会与/usr/local/filebeat/filebeat.docker.yml同步变化,所以如果需要更改配置文件的话只需要更改/usr/local/filebeat/filebeat.docker.yml然后重启容器就行,

    ③ 所以--volume="/usr/local/mysql/logs:/usr/share/filebeat/logs" 这段命令就是把宿主机的/usr/local/mysql/logs与容器的:/usr/share/filebeat/logs绑定到了一起,然后配置文件里面写

    /usr/share/filebeat/logs就能监听到/usr/local/mysql/logs的日志变化了

    4.查看elk

    打开elk,就可以看到日志了

     抱歉,上传不了图片了,不知道csdn最近怎么了,几个bug了

    5.使用logstash配置

    filebeat.docker.yml配置内容

    1. filebeat.config:
    2. modules:
    3. path: ${path.config}/modules.d/*.yml
    4. reload.enabled: false
    5. filebeat.autodiscover:
    6. providers:
    7. - type: docker
    8. hints.enabled: true
    9. processors:
    10. - add_cloud_metadata: ~
    11. # 日志输入配置
    12. filebeat.inputs:
    13. - type: log
    14. enabled: true
    15. paths:
    16. # 需要收集的日志所在的位置,可使用通配符进行配置
    17. - /usr/share/filebeat/logs/*
    18. #output.elasticsearch:
    19. # hosts: '123.105.121.12:9200'
    20. # username: 'elastic'
    21. # password: 'changeme'
    22. output.logstash:
    23. hosts: '123.105.121.12:5044'

    logstash配置内容

    因为没有图片演示,所以就口头叙述了,

    在elk操作页面上左边的导航栏找到Stack Management,然后点击logstash采集管道,新建一个采集管道,管道id和管道描述随便写,只要配置下面编辑区域一段就行了

    1. input {
    2.     beats {
    3.     port => 5044
    4.   }
    5. }
    6. filter {
    7. }
    8. output {
    9.      elasticsearch {
    10.       hosts => "134.102.65.12:9200"
    11.       manage_template => false
    12.       index => "%{[@metadata][beat]}-%{[@metadata][version]}" 
    13.       action => "create" 
    14.       pipeline => "%{[@metadata][pipeline]}" 
    15.       user => "elastic"
    16.       password => "changeme"
    17.     }
    18. }

    同样,如果没有username password就不用写

    重启filebeat

    1. [root@VM-8-12-centos filebeat]# docker ps
    2. CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
    3. 667d29176778 docker.elastic.co/beats/filebeat:7.1.1 "/usr/local/bin/dock…" 51 minutes ago Up 51 minutes filebeat
    4. [root@VM-8-12-centos filebeat]# docker restart 667d29176778

    6.附上一些docker命令

    docker exec -it 容器id /bin/bash: 进入容器

    ctrl+q+p:退出容器

    docker logs 容器id:查看日志

    docker stop 容器id: 停止容器运行

    docker rm 容器id: 删除容器

    docker ps: 查看正在运行的容器

    docker ps -a:查看所有的容器包括已经停止了的

    docker restart 容器id:重启容器

    7.另外关于docker的一些思考

    一个容器相当于一个系统, 使用docker exec -it 容器id /bin/bash 命令进去可以,在里面也可以使用ls等Linux命令,使用ls命令可以看到里面有着跟Linux很相似的文件目录,cd ../ 返回上一级ls也可以看到,而/bin/bash 就是它的根目录,我尝试了以下,如果直接docker exec -it 容器id 是会报错的,少了bin,bash哪个都不行

  • 相关阅读:
    监听页面滚动位置定位底部按钮(包含页面初始化定位不对鼠标滑动生效的解决方案)
    CRS 管理与维护
    java中的函数式接口是什么?
    Oracle EBS Interface/API(44)- 销售订单发运明细行拆分
    黑客技术(网络安全)自学2024
    SpringCloud——Hystrix(手写断路器思路、测试与优化)
    重生之我是一名程序员 33
    数据结构 2.2 单循环链表
    阿里云日志上报乱码问题记录
    WebGL 响应上下文丢失解决方案
  • 原文地址:https://blog.csdn.net/weixin_43900374/article/details/126521070