docker-compose搭建ELK+filebeat(7.6.2)读取springboot项目日志

docker-compose搭建ELK+filebeat读取springboot项目日志


1、日志框架介绍

1.1 日志门面 (日志的抽象层)

SLF4j(Simple Logging Facade for Java)

1.2 日志实现

Logback

1.3 日志级别

日志级别从低到高分为TRACE < DEBUG < INFO < WARN < ERROR < FATAL,如果设置为WARN,则低于WARN的信息都不会输出

1.4 logback多环境配置

为了能让springProperty的配置生效,需要把logback.xml 修改成 logback-spring.xml


2、ELK介绍

2.1 Elasticsearch

分布式搜索引擎。具有高可伸缩、高可靠、易管理等特点。可以用于全文检索、结构化检索和分析,并能将这三者结合起来。Elasticsearch 是用Java 基于 Lucene 开发,现在使用最广的开源搜索引擎之一,Wikipedia 、StackOverflow、Github 等都基于它来构建自己的搜索引擎。在elasticsearch中,所有节点的数据是均等的。

2.2 Logstash

数据收集处理引擎。支持动态的从各种数据源搜集数据,并对数据进行过滤、分析、丰富、统一格式等操作,然后存储以供后续使用。

2.3 Kibana

可视化化平台。它能够搜索、展示存储在 Elasticsearch 中索引数据。使用它可以很方便的用图表、表格、地图展示和分析数据。

2.4 Filebeat

轻量级数据收集引擎。相对于Logstash所占用的系统资源来说,Filebeat 所占用的系统资源几乎是微乎及微。它是基于原先 Logstash-fowarder 的源码改造出来。换句话说:Filebeat就是新版的 Logstash-fowarder,也会是 ELK Stack 在 Agent 的第一选择。


3、虚拟机一:部署elasticsearch和kibana(单机版)

3.1 准备虚拟机(CentOS-7-x86_64-DVD-2009.iso)

关闭防火墙

systemctl stop firewalld
systemctl disable firewalld

设置固定ip

cd /etc/sysconfig/network-scripts
ll
vim ifcfg-ens33

修改(有的修改,没有的添加)

BOOTPROTO=static
IPADDR="192.168.10.20"
NETMASK="255.255.255.0"
GATEWAY="192.168.10.1"
DNS1="114.114.114.114"

注:NETMASK与图中子网掩码一致
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dzxc00Cf-1690981690017)(src/main/resources/images/静态IP网关设置.png)]

重启网关

systemctl restart network

3.2 编写elasticsearch和kibana的docker-compose文件

version: '3.1'
services:
  elasticsearch:
    image: elasticsearch:7.6.2
    container_name: elasticsearch
    ports:
      - 9200:9200
    environment:
      - "cluster.name=elasticsearch"
      - "discovery.type=single-node"
      - "ES_JAVA_OPTS=-Xms256m -Xmx256m"
      - "ELASTIC_PASSWORD=ZhengJinWei123!"
      - "xpack.security.enabled=true"
    volumes:
      - ./plugins/:/usr/share/elasticsearch/plugins/
      - ./data/:/usr/share/elasticsearch/data/
  kibana:
    image: kibana:7.6.2
    container_name: kibana
    ports:
      - 5601:5601
    depends_on:
      - elasticsearch
    environment:
      - "elasticsearch.hosts=http://elasticsearch:9200"
      - "ELASTICSEARCH_USERNAME=elastic"
      - "ELASTICSEARCH_PASSWORD=ZhengJinWei123!"

3.3 汉化kibana

进入容器&打开文件

docker exec -it kibana bash
cd config
vi kibana.yml

编辑文件

server.name: kibana
server.host: "0.0.0.0"
# IpAddress:docker inspect es查看es容器内部的ip地址
elasticsearch.hosts: [ "http://{IpAddress}:9200" ]
monitoring.ui.container.elasticsearch.enabled: true
elasticsearch.username: "elastic"
elasticsearch.password: "ZhengJinWei123!"
i18n.locale: "zh-CN"

退出&重启

exit
docker restart kibana

4、虚拟机二:部署logstash(单机版)

4.1 配置静态IP

192.168.10.27

4.2 编写logstash的docker-compose文件

version: '3.1'
services:
  logstash:
    image: logstash:7.6.2
    container_name: logstash
    ports:
      - 9600:9600
      - 5044:5044
    environment:
      - TZ=Asia/Shanghai
      - LS_JAVA_OPTS=-Xmx256m -Xms256m
    volumes:
      #挂载logstash的配置文件
      - ./config/logstash.yml:/usr/share/logstash/config/logstash.yml
      - ./config/logstash.conf:/usr/share/logstash/pipeline/logstash.conf

4.3 修改config/logstash.yml

http.host: "0.0.0.0"
xpack.monitoring.enabled: true
#docker的物理ip
xpack.monitoring.elasticsearch.hosts: [ "http://192.168.10.20:9200" ]
#es的用户密码
xpack.monitoring.elasticsearch.username: "elastic"
xpack.monitoring.elasticsearch.password: "ZhengJinWei123!"

elasticsearch的用户密码需要手动执行命令,也可在compose里使用command

ssl.certificate_authority 复制es的证书到容器里,使用数据卷挂载出来

ca_trusted_fingerprint 第一次启动es的时候在日志里有打印

4.4 修改pipeline/logstash.conf

input {
  beats {
    port => 5044
  }
}

output {
  elasticsearch {
    hosts => ["192.168.10.20:9200"]
    # 自定义字段
    index => "demo-%{+YYYY.MM.dd}"
    user => "elastic"
    password => "ZhengJinWei123!"
  }
  #控制台输出,方便调试
  stdout {}
}

5、虚拟机三:部署springboot项目和filebeat

5.1 配置静态IP

192.168.10.28

5.2 编写filebeat的docker-compose文件

version: '3.1'
services:
  filebeat:
    container_name: filebeat
    image: elastic/filebeat:7.6.2
    volumes:
        #挂载日志输出路径
      - /usr/local/logs:/var/log/filebeat/logs
      - ./filebeat.yml:/usr/share/filebeat/filebeat.yml
      - ./data:/usr/share/filebeat/data
    ports:
      - 9000:9000

5.3 修改filebeat.yml

output.logstash:
  # The Logstash hosts
  hosts: ["192.168.10.27:5044"]

# output.elasticsearch:
#  hosts: '${ELASTICSEARCH_HOSTS:elasticsearch:9200}'
#  username: '${ELASTICSEARCH_USERNAME:}'
#  password: '${ELASTICSEARCH_PASSWORD:}'

filebeat.inputs:
- type: log
  paths:
  # docker 容器里的日志位置
    - /var/log/filebeat/logs/*.log
  multiline:
    pattern: '^[[:space:]]+(at|\.{3})[[:space:]]+\b|^Caused by:'
    negate: false
    match: after
    timeout: 5s

猜你喜欢

转载自blog.csdn.net/m0_68705273/article/details/132071550