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

#创建es的docker网络
docker network create elasticsearch
#拉取es镜像,版本号为8.12.2
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.12.2
#调整系统参数,否则es无法启动
echo 'vm.max_map_count=262144' >>/etc/sysctl.conf
sysctl -p
#创建elasticsearch用户
useradd -m elasticsearch
passwd elasticsearch

#创建es数据和目录文件夹(放在数据盘)
mkdir -p /mnt/storage/es/data
mkdir -p /mnt/storage/es/logs
mkdir -p /mnt/storage/es/plugins
#授权目录
chown -R elasticsearch:elasticsearch /mnt/storage/es/
chmod -R u+rwxs es/
chmod -R 777  /mnt/storage
#运行es,挂载配置文件目录、数据文件目录、日志目录
#前台查看输出,先执行这个,查看并记录es的信息
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


#进入es容器bash
docker start es
docker exec -it es /bin/bash
#压缩配置文件目录
cd /usr/share/elasticsearch
zip -r config.zip config/
#退出容器bash
exit
#将配置文件压缩包config.zip放到/home/elasticsearch 目录
docker cp es:/usr/share/elasticsearch/config.zip /home/elasticsearch/
chmod 777 /home/elasticsearch/config.zip
#解压配置文件压缩包
su elasticsearch
cd /home/elasticsearch
unzip config.zip
chmod -R 777 config/

#停止并删除容器
su root
docker stop es
docker rm es

#后台运行
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

cd /home/elasticsearch/config/certs
curl --cacert http_ca.crt -u elastic:${password} https://localhost:9200

#后续启动
docker start es

2.部署kibana

#创建kibana用户
useradd -m kibana
passwd kibana

#拉取镜像
docker pull docker.elastic.co/kibana/kibana:8.12.2
#运行
docker run --name kibana --net elasticsearch -p 5601:5601 docker.elastic.co/kibana/kibana:8.12.2

#ctrl+c停止容器
#启动kibana容器
docker start kibana
#将配置文件/home/kibana 目录
docker cp kibana:/usr/share/kibana/config /home/kibana/
cd /home/kibana
chmod -R 777 config/

#创建对应的数据、日志文件夹
su kibana
mkdir /home/kibana/data
mkdir /home/kibana/logs
chmod 777 /home/kibana/data
chmod 777 /home/kibana/logs

#停止之前的容器
su root
docker stop kibana
docker rm kibana
#设置中文
vi /home/kibana/config/kibana.yml
#在最后添加 i18n.locale: "zh-CN"

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
#查看启动日志,另外在浏览器查看效果
docker logs kibana
#查看是否正常运行
curl http://127.0.0.1:5601

#通过浏览器进入kibana页面后,会需要输入es的 enrollment token,如果过期了,执行如下命令获取
docker exec -it es /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

3.在应用服务器部署filebeat

#创建filebeat用户
useradd -m filebeat
passwd filebeat
#拉取镜像
docker pull docker.elastic.co/beats/filebeat:8.12.2
#将filebeat.yml放到/home/filebeat 目录下
chmod 777 /home/filebeat/filebeat.yml
chmod go-w /home/filebeat/filebeat.yml
#运行,需要将日志目录挂载到容器
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)

filebeat.inputs:
#dev环境日志采集
- type: log
  enabled: true
  paths:
    - /usr/share/filebeat/devlogs/base-gateway/base-gateway*.log
  fields:
    log_env: "applog_dev"
  fields_under_root: true
  json:
    keys_under_root: true
    overwrite_keys: true
    message_key: "message"
    add_error_key: true
#test1环境日志采集
- type: log
  enabled: true
  paths:
    - /usr/share/filebeat/test1logs/base-gateway/base-gateway*.log
  fields:
    log_env: "applog_test1"
  fields_under_root: true
  json:
    keys_under_root: true
    overwrite_keys: true
    message_key: "message"
    add_error_key: true

#test2环境日志采集
- type: log
  enabled: true
  paths:
    - /usr/share/filebeat/test2logs/base-gateway/base-gateway*.log
  fields:
    log_env: "applog_test2"
  fields_under_root: true
  json:
    keys_under_root: true
    overwrite_keys: true
    message_key: "message"
    add_error_key: true
    
filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

processors:
  - add_cloud_metadata: ~
  - add_docker_metadata: ~
  - timestamp:
      # 通过日志中的timestamp字段格式化时间值 给 时间戳 
      field: timestamp
      # 使用我国东八区时间  解析log时间
      timezone: Asia/Shanghai
      layouts:
        - '2006-01-02 15:04:05'
        - '2006-01-02 15:04:05.999'
      test:
        - '2019-06-22 16:33:51.765'

queue.mem:
  #每1秒钟就进行推送
  flush.timeout: 1s

output.elasticsearch:
  hosts: ["https://${es host}:${es port}"]
  #忽略证书校验
  ssl.verification_mode: none
  username: '${账号}'
  password: '${密码}'
  indices:
    - index: "logs-dev-%{+yyyy.MM}"
      when.contains:
        log_env: "applog_dev"
    - index: "logs-test1-%{+yyyy.MM}"
      when.contains:
        log_env: "applog_test1"
    - index: "logs-test2-%{+yyyy.MM}"
      when.contains:
        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

相关推荐

  1. 关于elk日志平台

    2024-04-03 09:46:03       6 阅读
  2. HPC平台

    2024-04-03 09:46:03       31 阅读

最近更新

  1. leetcode705-Design HashSet

    2024-04-03 09:46:03       8 阅读
  2. Unity发布webgl之后打开streamingAssets中的html文件

    2024-04-03 09:46:03       8 阅读
  3. vue3、vue2中nextTick源码解析

    2024-04-03 09:46:03       8 阅读
  4. 高级IO——React服务器简单实现

    2024-04-03 09:46:03       8 阅读
  5. 将图片数据转换为张量(Go并发处理)

    2024-04-03 09:46:03       7 阅读
  6. go第三方库go.uber.org介绍

    2024-04-03 09:46:03       8 阅读
  7. 前后端AES对称加密 前端TS 后端Go

    2024-04-03 09:46:03       10 阅读

热门阅读

  1. 工厂方法模式:灵活的创建对象实例

    2024-04-03 09:46:03       5 阅读
  2. WPF —— 关键帧动画

    2024-04-03 09:46:03       3 阅读
  3. Yolov5封装detect.py面向对象

    2024-04-03 09:46:03       2 阅读
  4. Rancher(v2.6.3)——Rancher部署Minio(单机版)

    2024-04-03 09:46:03       3 阅读
  5. STM32为什么不能跑Linux?

    2024-04-03 09:46:03       4 阅读
  6. 菜鸟笔记-Python函数-ones

    2024-04-03 09:46:03       4 阅读
  7. 14、Lua 模块与包

    2024-04-03 09:46:03       1 阅读
  8. 基于单片机的LED 灯调光系统的研究

    2024-04-03 09:46:03       3 阅读
  9. Git 多人协作开发

    2024-04-03 09:46:03       4 阅读
  10. Springboot自动配置原理

    2024-04-03 09:46:03       4 阅读
  11. JVM原理

    2024-04-03 09:46:03       2 阅读