page contents

基于docker部署es集群,以及filebeat解析es日志

如何跨过容器解析日志,同时配置日志参数?以及如何先通过docker快速部署一个es集群。六星小编来教你!

attachments-2021-12-XMGs4jnH61bd4a842a472.png

在docker部署的方式下,如何跨过容器解析日志,同时配置日志参数?以及如何先通过docker快速部署一个es集群。
我相信,通过这篇文章,这些问题会得解答。并且,在熟悉docker部署的方式以后,你会爱上这个方式。
本篇,默认你已经掌握了一些docker的基础命令,并对es集群有一定的了解。

1.通过docker-compose快速搭建es集群

我选择的版本7.13.4,各位同学根据自己的需要改动配置文件中的镜像版本。如果拉取官方镜像慢,可自行切换镜像源。
注:${ip}需要修改成你自己服务器的ip,其他配置非必要不需要修改。

###提前创建数据目录
mkdir -p /data/es-9200/data
mkdir -p /data/es-9200/logs
mkdir -p /data/es-9201/data
mkdir -p /data/es-9201/logs
mkdir -p /data/es-9202/data
mkdir -p /data/es-9202/logs
###授权权限
chow -R elk:elk /data/es-920*
### 创建docker-compose文件
touch docker-compose.yml
### 在文件中增加如下内容
version: '3.2'
services:
  elasticsearch01:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.13.4
    container_name: es-9200
    volumes:
      - /data/es-9200/data:/usr/share/elasticsearch/data:rw
      - /data/es-9200/logs:/data/elastic/logs:rw
      - /home/program/elk-config/log4j2.properties:/usr/share/elasticsearch/config/log4j2.properties:rw
    environment:
      node.name: "${HOSTNAME}-es9200"
      cluster.name: "docker-es"
      http.port: 9200
      transport.port: 9300
      network.host: "0.0.0.0"
      discovery.seed_hosts: "${ip}:9300"
      cluster.initial_master_nodes: "${ip}:9300"
      path.logs: "/data/elastic/logs"
      bootstrap.memory_lock: "true"
      xpack.ml.enabled: "false"
      xpack.security.enabled: "false"
      ES_JAVA_OPTS: "-Xmx1g -Xms1g -XX:ErrorFile=/data/elastic/logs/hs_err_pid%p.log -Xloggc:/data/elastic/logs/gc.log"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    restart: always
    network_mode: "host"

  elasticsearch02:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.13.4
    container_name: es-9201
    volumes:
      - /data/es-9201/data:/usr/share/elasticsearch/data:rw
      - /data/es-9201/logs:/data/elastic/logs:rw
      - /home/program/elk-config/log4j2.properties:/usr/share/elasticsearch/config/log4j2.properties:rw
    environment:
      node.name: "${HOSTNAME}-es9201"
      cluster.name: "docker-es"
      http.port: 9201
      transport.port: 9301
      network.host: "0.0.0.0"
      discovery.seed_hosts: "${ip}:9300"
      path.logs: "/data/elastic/logs"
      bootstrap.memory_lock: "true"
      xpack.ml.enabled: "false"
      xpack.security.enabled: "false"
      ES_JAVA_OPTS: "-Xmx1g -Xms1g  -XX:ErrorFile=/data/elastic/logs/hs_err_pid%p.log -Xloggc:/data/elastic/logs/gc.log"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    restart: always
    network_mode: "host"

  elasticsearch03:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.13.4
    container_name: es-9202
    volumes:
      - /data/es-9202/data:/usr/share/elasticsearch/data:rw
      - /data/es-9202/logs:/data/elastic/logs:rw
      - /home/program/elk-config/log4j2.properties:/usr/share/elasticsearch/config/log4j2.properties:rw
    environment:
      node.name: "${HOSTNAME}-es9202"
      cluster.name: "docker-es"
      http.port: 9202
      transport.port: 9302
      network.host: "0.0.0.0"
      discovery.seed_hosts: "${ip}:9300"
      path.logs: "/data/elastic/logs"
      bootstrap.memory_lock: "true"
      xpack.ml.enabled: "false"
      xpack.security.enabled: "false"
      ES_JAVA_OPTS: "-Xmx1g -Xms1g -XX:ErrorFile=/data/elastic/logs/hs_err_pid%p.log -Xloggc:/data/elastic/logs/gc.log"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    restart: always
    network_mode: "host"

### 在docker-compose.yml所在目录下执行命令,启动容器
docker-compose up
### 查看启动的容器,这里应该显示三个。es-9200,es-9201,es-9201
docker ps 
### 查看容器日志,看是否报错。因为设置了restart: always,所以即使报错,也会一直重启。
docker logs -f es-9200
### 如果没有报错,链接集群验证

思考,容器部署带来了什么?

  1. 简化了部署的步骤,将核心的配置以env的形式维护到一个yml文件中。调试好以后,基本一个yml文件走天下。避免了部署时,频繁的目录切换,和多个yml文件维护。
  2. 容器的高可用,如果es节点挂掉,容器化技术可以自动重启。
  3. 趋势,既然容器化已然是一种趋势,那就拥抱它。

docker-compose.yml参数解析

  1. restart: always 容器挂掉,自动重启,确保高可用。
  2. /home/program/elk-config/log4j2.properties:/usr/share/elasticsearch/config/log4j2.properties:rw docker容器封装的log4j2.properties不打印集群json日志。研究了好一会儿,才想到解压了一个原生部署的包,拿到日志配置文件后,挂载到容器里面。

2.filebeat解析日志

### 解压压缩的filebeat.tar.gz
tar -zxvf filebeat-7.13.4-linux-x86_64.tar.gz
### 进入解压的文件
cd filebeat-7.13.4-linux-x86_64
vim filebeat.yml
### 修改filebeat.yml,主要是如下配置。
filebeat.config.modules:
  path: path: ${path.config}/modules.d/*.yml
  reload.enabled: true
  reload.period: 10s

### 进入modules.d,修改elasticsearch.yml
cd modules.d
cp elasticsearch.yml.disabled elasticsearch.yml
vim elasticsearch.yml
### 修改成如下配置,其他配置可按照自己需要修改.es ip根据实际修改
- module: elasticsearch
  server:
    enabled: true
    var.paths:
     - /data/es-9200/logs/*_server.json
     - /data/es-9201/logs/*_server.json
     - /data/es-9202/logs/*_server.json
 

output.elasticsearch:
  hosts: ["localhost:9200"]
  setup.template.enable: false
  setup.ilm.enabled: false
  monitoring.enabled: true
### 修改完成以后,执行启动filebeat
cd ..
./filebeat &
### 查看filebeat日志是否正常
tail -f logs/filebeat

至此,完整的es日志解析,已经完成了。

不过,纸上得来终觉浅,绝知此事要躬行。希望各位同学,动手实操。唯有实践,才能提升自己的能力。

更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。

如果你想用Python开辟副业赚钱,但不熟悉爬虫与反爬虫技术,没有接单途径,也缺乏兼职经验
关注下方微信公众号:Python编程学习圈,获取价值999元全套Python入门到进阶的学习资料以及教程,还有Python技术交流群一起交流学习哦。

attachments-2022-06-tYgoUwZp62b18e4c9c632.jpeg

  • 发表于 2021-12-18 10:42
  • 阅读 ( 830 )
  • 分类:PHP开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
轩辕小不懂
轩辕小不懂

2403 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1470 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章