基于docker部署elk进行日志管理和分析

2022-05-23 09:52:10 浏览数 (1)

前言

ELK 是 Elasticsearch、Logstrash 和 Kibana 的缩写,它们代表的是一套成熟的日志管理系统,ELK Stack 已经成为目前最流行的集中式日志解决管理方案。

Elasticsearch

分布式搜索和分析引擎,具有高可伸缩、高可靠和易管理等特点。基于 Apache Lucene 构建,能对大容量的数据进行接近实时的存储、搜索和分析操作

Logstrash

数据收集引擎。它支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储到用户指定的位置;

Kibana

数据分析和可视化平台。通常与 Elasticsearch 配合使用,对其中数据进行搜索、分析和以统计图表的方式展示

Filebeat

ELK 协议栈的新成员,一个轻量级开源日志文件数据搜集器,基于 Logstash-Forwarder 源代码开发是对它的替代。在需要采集日志数据的服务上安装 Filebeat,并指定日志目录或日志文件后,Filebeat 就能读取日志文件数据,迅速发送到 Logstash 进行解析,或直接发送到 Elasticsearch 进行集中式存储和分析。

es集群部署

安装docker

docker和docker-compose一键安装脚本

docker-compose.yml

代码语言:javascript复制
version: '3'
services:
  es-master:
    image: elasticsearch:7.16.2
    container_name: es-master
    restart: always
    user: root
    environment:
      # 开启内存锁定
      - "bootstrap.memory_lock=true"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "TAKE_FILE_OWNERSHIP=true"
      - "TZ=Asia/Shanghai"
    ulimits:
      # 取消内存相关限制  用于开启内存锁定
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./conf/es-master.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /data/ly-elk/master/data:/usr/share/elasticsearch/data
      - /data/ly-elk/master/logs:/usr/share/elasticsearch/logs
      - /data/ly-elk/master/plugins:/usr/share/elasticsearch/plugins
    ports:
      - "9200:9200"
      - "9300:9300"
    mem_limit: 3g
    networks:
      - elk
  es-slave1:
    image: elasticsearch:7.16.2
    container_name: es-slave1
    restart: always
    user: root
    environment:
      # 开启内存锁定
      - "bootstrap.memory_lock=true"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "TAKE_FILE_OWNERSHIP=true"
      - "TZ=Asia/Shanghai"
    ulimits:
      # 取消内存相关限制  用于开启内存锁定
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./conf/es-slave1.yml:/usr/share/elasticsearch/config/elasticsearch.yml
      - /data/ly-elk/slave1/data:/usr/share/elasticsearch/data
      - /data/ly-elk/slave1/logs:/usr/share/elasticsearch/logs
      - /data/ly-elk/slave1/plugins:/usr/share/elasticsearch/plugins
    ports:
      - "9201:9201"
      - "9301:9301"
    mem_limit: 3g
    networks:
      - elk

  kibana:
    image: kibana:7.16.2
    container_name: kibana
    restart: always
    depends_on:
      - es-master   #kibana在elasticsearch启动之后再启动
      - es-slave1
    environment:
      - "ELASTICSEARCH_HOSTS=http://es-master:9200"
      - "I18N_LOCALE=zh-CN"
      - "TZ=Asia/Shanghai"
    ports:
      - "5601:5601"
    volumes:
      - ./conf/kibana.yml:/usr/share/kibana/config/kibana.yml
    networks:
      - elk

  logstash:
    image: logstash:7.16.2
    container_name:  logstash
    restart: always
    depends_on:
      - es-master #logstash在elasticsearch启动之后再启动
      - es-slave1
    environment:
      - "elasticsearch.hosts=http://es-master:9200"
      - "xpack.monitoring.elasticsearch.hosts=http://es-master:9200"
      - "xpack.monitoring.enabled=true"
      - "TZ=Asia/Shanghai"
    volumes:
      - ./conf/logstash/:/usr/share/logstash/pipeline
    ports:
      - "5044:5044" #设置端口
    networks:
      - elk

networks:
  elk:

es-master.yml

代码语言:javascript复制
# 集群名称
cluster.name: es-cluster
# 节点名称
node.name: es-master
# 是否可以成为master节点
node.master: true
# 是否允许该节点存储数据,默认开启
node.data: true
# 网络绑定
network.host: 0.0.0.0
# 设置对外服务的http端口
http.port: 9200
# 设置节点间交互的tcp端口
transport.port: 9300
# 集群发现
discovery.seed_hosts:
  - es-master
  - es-slave1
# 手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计算
cluster.initial_master_nodes:
  - es-master
# 支持跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
# 安全认证
xpack.security.enabled: false
#http.cors.allow-headers: "Authorization"

es-slave1.yml

代码语言:javascript复制
# 集群名称
cluster.name: es-cluster
# 节点名称
node.name: es-slave1
# 是否可以成为master节点
node.master: true
# 是否允许该节点存储数据,默认开启
node.data: true
# 网络绑定
network.host: 0.0.0.0
# 设置对外服务的http端口
http.port: 9200
# 设置节点间交互的tcp端口
transport.port: 9300
# 集群发现
discovery.seed_hosts:
  - es-master
  - es-slave1
# 手动指定可以成为 mater 的所有节点的 name 或者 ip,这些配置将会在第一次选举中进行计算
cluster.initial_master_nodes:
  - es-master
# 支持跨域访问
http.cors.enabled: true
http.cors.allow-origin: "*"
# 安全认证
xpack.security.enabled: false
#http.cors.allow-headers: "Authorization"

启动

代码语言:javascript复制
docker-compose up -d

健康检查

es 集群状态

通过filebeat传输日志

服务器部署

基于docker的filebeat在需要收集日志的服务器上单独启动

docker-compose.yml

代码语言:javascript复制
version: "3"
services:
  filebeat:
    # 容器名称
    container_name: filebeat
    # 主机名称
    hostname: filebeat
    # 镜像
    image: elastic/filebeat:8.2.0
    # 重启机制
    restart: always
    # 启动用户
    user: root
    # 持久化挂载
    volumes:
      # 映射到容器中[作为数据源]
      - /var/log/messages:/log/messages

      # 方便查看数据及日志(可不映射)
      - /data/ly-elk/filebeat/logs:/usr/share/filebeat/logs
      - /data/ly-elk/filebeat/data:/usr/share/filebeat/data

      # 映射配置文件到容器中
      - ./conf/filebeat.yml:/usr/share/filebeat/filebeat.yml
    # 使用主机网络模式
    network_mode: host

filebeat.yml

代码语言:javascript复制
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /log/messages
  fields:
    log_type: syslog

output.logstash:
  hosts: ["127.0.0.1:5044"]
  enabled: true
  worker: 1
  compression_level: 3
  loadbalance: true

启动

代码语言:javascript复制
docker-compose up -d

es集群确认

确认es是否收到日志

代码语言:javascript复制
# 检测集群是否健康
# green表示正常
curl '127.0.0.1:9200/_cat/health?v'

# 列出所有索引
# 是否收到日志
curl '127.0.0.1:9200/_cat/indices?v'

kibana 使用

访问

http://ip:5601

首页

message日志

可观测性-->日志-->流式传输

0 人点赞