iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 27
0
Elastic Stack on Cloud

親愛的,我把ElasticSearch上雲了系列 第 27

Day 27 Filebeat with multiple module and ELK Dashboard

Day 27 Filebeat with multiple module and ELK Dashboard

前言

昨天我們昨天我們將Filebeat也作為一個Container啟動,因此不管是網頁系統的後端程式、Nginx以及蒐集Log的Filebeat我們都將它容器化,並且透過volume以及內部port讓他彼此聯繫。另外因為我們的ELK是在雲端上,因此不需要再開啟ELK的服務,否則Elasticsearch以及Kibana可能都需要再開一個container。今天我們要來講透過filebeat以及之前的建構,一次蒐集很多種的log。

Multiple Type Logs

今天我們要來思考一下,前面幾天我們都是蒐集nginx的log,那我們如果今天我們想要除了nginx log外,也想知道目前container硬體健康狀況,或是系統穩定度的部分,那我們除了nginx log外勢必需要其他的log。

而需要其他log,我們難道是要多開幾個filebeat的container去做蒐集嗎?

其實filebeat的listen是可以設置多重的,意思是可以一次enable多個moudle,而透過enable多個module,filebeat就可以一次監聽多個路徑。

因此以我們這個服務為範例,我們只需要將filebeat的container設定多開幾個模組,並且給予他設定檔。

另外就是多設幾個volume讓你所想要蒐集的log,能夠share到filebeat的container,如此一來就可以透過一個filebeat服務,一次監聽多種log,進而上傳到elastic cloud,並可以透過多個Dashboard監控。

Example

我們這次簡單實作多加一個Syslog,而蒐集的對象就是flask的container。

flask Dockerfile

FROM python:3.7.2-stretch
WORKDIR /app
ADD . /app
RUN apt-get update
RUN apt-get -y install rsyslog
RUN pip install --upgrade pip
RUN pip install -r requirements.txt
CMD ["uwsgi", "wsgi.ini"]

首先我們先讓flask container中的debain系統,update apt以及安裝rsyslog,這個是能夠蒐集syslog的套件,而路徑會是在/var/log/syslog

接著我們要在filebeat的container中設定syslog的部分

system.yml

# Module: system
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.9/filebeat-module-system.html

- module: system
  # Syslog
  syslog:
    enabled: true

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    var.paths: ["/var/log/syslog*"]

  # Authorization logs
  auth:
    enabled: false

    # Set custom paths for the log files. If left empty,
    # Filebeat will choose the paths depending on your OS.
    #var.paths:

我們這邊設定路徑為 /var/log/syslog

filebeat Dockerfile

FROM docker.elastic.co/beats/filebeat:7.9.2
COPY filebeat.yml /usr/share/filebeat/filebeat.yml
USER root
RUN chown root:filebeat /usr/share/filebeat/filebeat.yml
USER filebeat
RUN filebeat modules enable nginx system
COPY nginx.yml /usr/share/filebeat/modules.d/nginx.yml
COPY system.yml /usr/share/filebeat/modules.d/system.yml

加入system.yml以及enable system module

最後就是同樣要在compose下設置

version: '3.3'

services:

  flask:
    build: ./flask
    volumes:
      - "/c/Users/user/flask-nginx-elk-demo/syslog:/var/log/syslog"
    container_name: template_flask
    # restart: always
    environment:
      - APP_NAME=FlaskApp
    expose:
      - 8080


  nginx:
    build: ./nginx
    volumes:
      - "/c/Users/user/flask-nginx-elk-demo/nginx-logs:/var/log/nginx"
    container_name: template_nginx
    # restart: always
    ports:
      - "80:80"

    depends_on:
      - flask

  filebeat:
    build: ./filebeat
    volumes:
      - "/c/Users/user/flask-nginx-elk-demo/nginx-logs:/var/log/nginx"
      - "/c/Users/user/flask-nginx-elk-demo/syslog:/var/log/syslog"
    container_name: template_filebeat
    # restart: always

    depends_on:
      - nginx

將flask container以及filebeat加入volume

如此一來就可以同時蒐集兩者,並且將這兩者都導到本機備份


上一篇
Day 26 Docker-Compose nginx + flask container with filebeat-another structure
下一篇
Day 28 Work With Elastic Cloud
系列文
親愛的,我把ElasticSearch上雲了30

尚未有邦友留言

立即登入留言