• EFK(elasticsearch+filebeat+kibana)日志分析平台搭建


    本文是记录一下EFK日志平台的搭建过程

    项目背景:

    此次搭建的日志分析平台主要是采集服务器上的java服务的log日志(输出的日志已经是json格式),这些日志都已经按照不同环境输出到/home/dev   /home/test1   /home/test2 目录下了,按照不同的应用服务输出到不同的目录,比如dev环境的 common 服务,会输出到/dev/logs/common/common.log

    EFK服务的部署都使用docker,然后将数据目录挂载至容器中

    基础架构模型:

    1.部署es

    1. #创建es的docker网络
    2. docker network create elasticsearch
    3. #拉取es镜像,版本号为8.12.2
    4. docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2
    5. #调整系统参数,否则es无法启动
    6. echo 'vm.max_map_count=262144' >>/etc/sysctl.conf
    7. sysctl -p
    8. #创建elasticsearch用户
    9. useradd -m elasticsearch
    10. passwd elasticsearch
    11. #创建es数据和目录文件夹(放在数据盘)
    12. mkdir -p /mnt/storage/es/data
    13. mkdir -p /mnt/storage/es/logs
    14. mkdir -p /mnt/storage/es/plugins
    15. #授权目录
    16. chown -R elasticsearch:elasticsearch /mnt/storage/es/
    17. chmod -R u+rwxs es/
    18. chmod -R 777 /mnt/storage
    19. #运行es,挂载配置文件目录、数据文件目录、日志目录
    20. #前台查看输出,先执行这个,查看并记录es的信息
    21. docker run --name es -e "ES_JAVA_OPTS=-Xms3072m -Xmx3072m" -v /mnt/storage/es/data:/usr/share/elasticsearch/data -v /mnt/storage/es/logs:/usr/share/elasticsearch/logs -v /mnt/storage/es/plugins:/usr/share/elasticsearch/plugins -v /etc/localtime:/etc/localtime:ro --net elasticsearch -p 9200:9200 -m 4GB -it docker.elastic.co/elasticsearch/elasticsearch:8.12.2
    22. #进入es容器bash
    23. docker start es
    24. docker exec -it es /bin/bash
    25. #压缩配置文件目录
    26. cd /usr/share/elasticsearch
    27. zip -r config.zip config/
    28. #退出容器bash
    29. exit
    30. #将配置文件压缩包config.zip放到/home/elasticsearch 目录
    31. docker cp es:/usr/share/elasticsearch/config.zip /home/elasticsearch/
    32. chmod 777 /home/elasticsearch/config.zip
    33. #解压配置文件压缩包
    34. su elasticsearch
    35. cd /home/elasticsearch
    36. unzip config.zip
    37. chmod -R 777 config/
    38. #停止并删除容器
    39. su root
    40. docker stop es
    41. docker rm es
    42. #后台运行
    43. docker run --name es -e "ES_JAVA_OPTS=-Xms3072m -Xmx3072m" -v /home/elasticsearch/config:/usr/share/elasticsearch/config -v /mnt/storage/es/data:/usr/share/elasticsearch/data -v /mnt/storage/es/logs:/usr/share/elasticsearch/logs -v /mnt/storage/es/plugins:/usr/share/elasticsearch/plugins -v /etc/localtime:/etc/localtime:ro --net elasticsearch -p 9200:9200 -m 4GB -d docker.elastic.co/elasticsearch/elasticsearch:8.12.2
    44. cd /home/elasticsearch/config/certs
    45. curl --cacert http_ca.crt -u elastic:${password} https://localhost:9200
    46. #后续启动
    47. docker start es

    2.部署kibana

    1. #创建kibana用户
    2. useradd -m kibana
    3. passwd kibana
    4. #拉取镜像
    5. docker pull docker.elastic.co/kibana/kibana:8.12.2
    6. #运行
    7. docker run --name kibana --net elasticsearch -p 5601:5601 docker.elastic.co/kibana/kibana:8.12.2
    8. #ctrl+c停止容器
    9. #启动kibana容器
    10. docker start kibana
    11. #将配置文件/home/kibana 目录
    12. docker cp kibana:/usr/share/kibana/config /home/kibana/
    13. cd /home/kibana
    14. chmod -R 777 config/
    15. #创建对应的数据、日志文件夹
    16. su kibana
    17. mkdir /home/kibana/data
    18. mkdir /home/kibana/logs
    19. chmod 777 /home/kibana/data
    20. chmod 777 /home/kibana/logs
    21. #停止之前的容器
    22. su root
    23. docker stop kibana
    24. docker rm kibana
    25. #设置中文
    26. vi /home/kibana/config/kibana.yml
    27. #在最后添加 i18n.locale: "zh-CN"
    28. docker run --name kibana -v /home/kibana/config:/usr/share/kibana/config -v /home/kibana/data:/usr/share/kibana/data -v /home/kibana/logs:/usr/share/kibana/logs -v /etc/localtime:/etc/localtime:ro --net elasticsearch -p 5601:5601 -d docker.elastic.co/kibana/kibana:8.12.2
    29. #查看启动日志,另外在浏览器查看效果
    30. docker logs kibana
    31. #查看是否正常运行
    32. curl http://127.0.0.1:5601
    33. #通过浏览器进入kibana页面后,会需要输入es的 enrollment token,如果过期了,执行如下命令获取
    34. docker exec -it es /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

    3.在应用服务器部署filebeat

    1. #创建filebeat用户
    2. useradd -m filebeat
    3. passwd filebeat
    4. #拉取镜像
    5. docker pull docker.elastic.co/beats/filebeat:8.12.2
    6. #将filebeat.yml放到/home/filebeat 目录下
    7. chmod 777 /home/filebeat/filebeat.yml
    8. chmod go-w /home/filebeat/filebeat.yml
    9. #运行,需要将日志目录挂载到容器
    10. docker run -u root --name filebeat -v /home/filebeat/data:/usr/share/filebeat/data:rw -v /home/filebeat/filebeat.yml:/usr/share/filebeat/filebeat.yml:ro -v /home/filebeat/logs:/usr/share/filebeat/logs -v /home/dev/logs:/usr/share/filebeat/devlogs:ro -v /home/test1/logs:/usr/share/filebeat/test1logs:ro -v /home/test2/logs:/usr/share/filebeat/test2logs:ro -v /etc/localtime:/etc/localtime:ro --privileged -m 1GB -d docker.elastic.co/beats/filebeat:8.12.2

    4.filebeat配置(按照不同的环境将日志分发到不同的es index)

    1. filebeat.inputs:
    2. #dev环境日志采集
    3. - type: log
    4. enabled: true
    5. paths:
    6. - /usr/share/filebeat/devlogs/base-gateway/base-gateway*.log
    7. fields:
    8. log_env: "applog_dev"
    9. fields_under_root: true
    10. json:
    11. keys_under_root: true
    12. overwrite_keys: true
    13. message_key: "message"
    14. add_error_key: true
    15. #test1环境日志采集
    16. - type: log
    17. enabled: true
    18. paths:
    19. - /usr/share/filebeat/test1logs/base-gateway/base-gateway*.log
    20. fields:
    21. log_env: "applog_test1"
    22. fields_under_root: true
    23. json:
    24. keys_under_root: true
    25. overwrite_keys: true
    26. message_key: "message"
    27. add_error_key: true
    28. #test2环境日志采集
    29. - type: log
    30. enabled: true
    31. paths:
    32. - /usr/share/filebeat/test2logs/base-gateway/base-gateway*.log
    33. fields:
    34. log_env: "applog_test2"
    35. fields_under_root: true
    36. json:
    37. keys_under_root: true
    38. overwrite_keys: true
    39. message_key: "message"
    40. add_error_key: true
    41. filebeat.config:
    42. modules:
    43. path: ${path.config}/modules.d/*.yml
    44. reload.enabled: false
    45. processors:
    46. - add_cloud_metadata: ~
    47. - add_docker_metadata: ~
    48. - timestamp:
    49. # 通过日志中的timestamp字段格式化时间值 给 时间戳
    50. field: timestamp
    51. # 使用我国东八区时间 解析log时间
    52. timezone: Asia/Shanghai
    53. layouts:
    54. - '2006-01-02 15:04:05'
    55. - '2006-01-02 15:04:05.999'
    56. test:
    57. - '2019-06-22 16:33:51.765'
    58. queue.mem:
    59. #每1秒钟就进行推送
    60. flush.timeout: 1s
    61. output.elasticsearch:
    62. hosts: ["https://${es host}:${es port}"]
    63. #忽略证书校验
    64. ssl.verification_mode: none
    65. username: '${账号}'
    66. password: '${密码}'
    67. indices:
    68. - index: "logs-dev-%{+yyyy.MM}"
    69. when.contains:
    70. log_env: "applog_dev"
    71. - index: "logs-test1-%{+yyyy.MM}"
    72. when.contains:
    73. log_env: "applog_test1"
    74. - index: "logs-test2-%{+yyyy.MM}"
    75. when.contains:
    76. log_env: "applog_test2"

    参考:

    前言 · ELKstack 中文指南

    ES官方文档 What is Elasticsearch? | Elasticsearch Guide [8.12] | Elastic

    Kibana官方文档 Kibana—your window into Elastic | Kibana Guide [8.12] | Elastic

    Filebeat官方文档 Filebeat overview | Filebeat Reference [8.12] | Elastic

  • 相关阅读:
    C#面:简单介绍 序列化 和 反序列化
    java8 新特性 -Optional的常见用法
    Python 自定义模块和包设计英语生词本(文件版)
    Linux发展史——Linux
    java 常用正则表达式记录
    floyd, 潜意识等
    人工智能:人脸识别技术应用场景介绍
    老生常谈,equals和hashCode的暗操作
    win11开启护眼模式设置
    第1关:构造函数与析构函数的实现
  • 原文地址:https://blog.csdn.net/hero_lxz/article/details/137267536