侧边栏壁纸
博主头像
Komi博主等级

WizMan Komi

  • 累计撰写 30 篇文章
  • 累计创建 43 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

使用Docker-Compose搭建ELK系统作为日志收集框架

Komi
2022-08-25 / 0 评论 / 0 点赞 / 55 阅读 / 2,521 字
温馨提示:
内容仅供参考,实际使用需根据自身条件进行调整与删改

ELK是什么?

The ELK stack is an acronym used to describe a stack that comprises of three popular projects: Elasticsearch, Logstash, and Kibana.

进入ELK官网下载页面

简单来讲,ELK就是Elasticsearch和Logstash加上Kibana这三个框架组成的一个日志信息搜索框架,ES作为中间处理层(搜索引擎),Logstash作为数据源层,Kibana作为看板展示层

Docker-Compose?

我们知道Docker是一个可以将应用程序容器化部署的工具,而Docker-Compose更方便我们借助docker来进行对各个容器进行编排以及定制化环境,Docker-Compose主要基于yml(YAML)格式的文件作为配置文件进行容器编排

准备配置文件

version: "3"

networks:
  elasticBundle:
    external: true

services:
  es-main:
    container_name: es_main
    image: elasticsearch:7.1.1
    restart: always
    ports:
      - 9200:9200
    volumes:
      - ./ES/config/elasticsearch.yml:/www/elasticsearch/master/conf/es-master.yml
      - ./ES/data:/www/elasticsearch/master/data
      - ./ES/logs:/www/elasticsearch/master/logs
    environment:
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - "TZ=Asia/Shanghai"
      - "cluster.name=elasticsearch-cluster01"
      - "discovery.type=single-node"
    networks:
      - elasticBundle

  kibana:
    container_name: kibana
    image: kibana:7.1.1
    restart: always
    ports:
      - 5601:5601
    volumes:
      - ./Kibana/kibana.yml:/www/kibana/conf/kibana.yml
    environment:
      - "TZ=Asia/Shanghai"
    depends_on:
      - es-main
    networks:
      - elasticBundle

  logstash:
    container_name: logstash
    image: logstash:7.1.1
    restart: always
    volumes:
      # 映射到容器中
      - ./Logstash/conf/mysql-conf.conf:/www/logstash/conf/logstash-conf01.conf
      - ./Logstash/conf/mysql-conf-staging01.conf:/www/logstash/conf/logstash-conf02.conf
      - ./Logstash/lib/mysql/mysql-connector-java-8.0.30.jar:/www/logstash/lib/mysql/mysql-connector-java-8.0.30.jar
    environment:
      - "TZ=Asia/Shanghai"
    ports:
      - 5044:5044
    depends_on:
      - es-main
    networks:
      - elasticBundle
名称作用说明
networks自定义新建一个名为elasticBundle的docker网络环境,并将该网络环境在Compose过程之外先创建(external: true)
container_name容器名
image使用的镜像(本地或者远程Hub上的) 可以在冒号后指定对应的镜像发布版本
restart在docker重启后该容器的重启机制,这里默认使用always,也就是跟随docker重启后一同重启服务
volumes卷名映射,这里主要是为了让容器中的文件能够直接映射到本地机器上的文件路径,写法-> HOST_PATH:CONTAINER_PATH:ro/rw 这里的ro/rw其实是对容器中的文件属性定义是否为只读文件,若没有直接定义的话默认为rw,即可读可写
environments容器的配置,一般是key-value格式 中间用等号分隔
depends_on这个属性主要是作用于对容器的启动顺序,depends_on后面跟的容器启动优先级会更高,因为是被依赖项
ports端口映射,依旧是 HOST_PORT:CONTAINER_PORT的形式,这里可以绑定多个端口

准备好配置文件后我们可以直接使用docker-compose命令来启动了

docker-compose -f ./xxx.yml up -d

遇到的问题

  1. Logstash和Kibana无法连接到Elasticsearch

这里推测可能是logstash和kibana无法直接连接到http://elasticsearch:9200(内部的配置)导致的,我们需要在docker里面直接修改为Elasticsearch容器的IP

aop4.png

aop1.png

aop2.png

aop3.png

  1. ElasticSearch无法启动

需要将docker中的vm.max_map_count的值调大

  • Windows
wsl -d docker-desktop
sysctl -w vm.max_map_count=262144
  • Linux
grep vm.max_map_count /etc/sysctl.conf
vm.max_map_count=xxx

sysctl -w vm.max_map_count=262144
  • MacOS
screen ~/Library/Containers/com.docker.docker/Data/vms/0/tty
sysctl -w vm.max_map_count=262144
0

评论区