[03] 构建 EFK(Elasticsearch + Fluentd + Kibana)…启动 Docker 容器(附有说明)

本シリーズのトップページhttps://qiita.com/robozushi10/items/68dc5f8c2df38f160fda

首先

在职场1中,我们谈到了引入”CI/CD日志”和”CLI和Web应用程序日志”的收集和可视化。另外,在我在家学习K8s的过程中,经常听到Fluentd这个词。

因此,我决定在我的Ubuntu 18.04主机上使用docker-compose来构建一个Elasticsearch + Fluentd + Kibana(EFK)环境,如下图和下表所示,以进行验证并获得对这些软件的理解。

在本章节中,将列举使用docker-compose.yml文件来配置并启动下图所示内容的详细步骤。

如果在代理下进行设置,
[04] EFK(Elasticsearch + Fluentd + Kibana)的构建… 可能会参考Docker容器的启动(在代理服务器下)。

形成

image.png

整一下

Noサービスホスト側ポートコンテナ側ポート備考1Nginx2133780採用バージョン v1.20.0.
Fluentd のテストのために導入しているだけである.
本表 No 2 の Fluentd(24224) へログを配送する.2Fluentd2422424224採用バージョン v1.13.1.
受信したログを本表 No 3 の Fluentd(34224)へ転送する.3Fluentd3422434224採用バージョン v1.13.1.
受信したログを Elasticsearch へ書き込みする.4Elasticsearch2920029200採用バージョン v7.14.
ログ格納のためのデータストア.
日本語検索をするための analysis-kuromoji 導入あり.5Kibana2960129601採用バージョン v7.14.
Elasticsearch の視覚化

请注意下一个事项

为了考虑到工作环境,进行了以下设置。

・有两个部署了Fluentd的实例。
・将Elasticsearch容器的端口设置为9200以外的其他端口。
・将Kibana容器的端口设置为5601以外的其他端口。

请用汉语将以下内容进行释义,只需提供一种选项:

步驟

1. 文件结构

使用Git clone获取整个代码库。

 $ git clone -b Qiita-02 git@github.com:robozushi10/qiita-efk.git
$ cd qiita-efk.git
$ tree . --charset=c
.
|-- PV
|   |-- elasticsearch
|   |   `-- config
|   |       `-- elasticsearch.yml ... Elasticsearch の挙動パラメータ定義
|   |-- fluentd
|   |   |-- etc
|   |   |   `-- fluent.conf ......... Fluentd 24224ポートでの待ち受け定義
|   |   `-- log ..................... バッファログ出力先ディレクトリ
|   |-- fluentd2
|   |   |-- etc
|   |   |   `-- fluent.conf ......... Fluentd 34224ポートでの待ち受け定義
|   |   `-- log ..................... バッファログ出力先ディレクトリ
|   `-- kibana
|       `-- config
|           `-- kibana.yml .......... Kibana の挙動パラメータ定義
|-- README.md
|-- assets
|   |-- elasticsearch
|   |   `-- Dockerfile .............. 日本語検索のための analysis-kuromoji のインストールあり
|   |-- fluentd2
|   |   `-- Dockerfile .............. Elasticsearch プラグインのインストールあり
|   `-- nginx
|       `-- Dockerfile .............. jwilder/dockerize を使って Fluentd, Elasticsearch, Kibana の起動を待つ
|                                     K8s での ReadinessProbe の挙動に近いはず
`-- docker-compose.yml

2. 每个文件的详细信息。

文件的全部内容可以从以下地方获得。在这里只记录了认为重要的事项。

$ git clone -b Qiita-02 git@github.com:robozushi10/qiita-efk.git

docker-compose.yml的翻译就是:docker-compose.yml

我在代码中将要注意的要点作为注释写下来。

关于docker-compose.yml文件中的Nginx部分


#   ⬇️ Nginx は Fluentd のテストのために導入しただけである
  nginx:
    image: nginx:1.20.0
    build: assets/nginx
    container_name: myfld_nginx
    ports:
      - "21337:80"
#   ⬇️ ログ出力先を fluentd にする
    logging:
      driver: "fluentd"
      options:
        fluentd-address: "localhost:24224"
        tag: "docker.{{.Name}}"
#   ⬇️ jwilder/dockerize コマンドを使って、0.5秒周期で最大2分間まで、
#      Fluentd, Elasticsearch, Kibana の起動を待つ. HTTP 応答 200 なら起動完了とみなす.
#      なお、jwilder/dockerize は Dockerfile の中でインストールをしている.
    command: >
      dockerize -wait tcp://fluentd:24224 -wait tcp://fluentd2:34224 -wait tcp://kibana:29601 -wait tcp://elasticsearch:29200 -timeout 2m -wait-retry-interval 0.5s
      /usr/sbin/nginx -g 'daemon off;' -c /etc/nginx/nginx.conf
    depends_on:
      - fluentd
      - elasticsearch
      - kibana

关于 docker-compose.yml 文件中的 Fluentd 配置

  fluentd:
    image: fluent/fluentd:v1.13-1
    container_name: myfld_fluentd
    restart: always
    command: >
      /usr/bin/fluentd -c /fluentd/etc/fluent.conf -v
    ports:
      - "127.0.0.1:24224:24224"
      - "127.0.0.1:24224:24224/udp"
    volumes:
#   ⬇️ バッファリングしたデータファイルが保存される
      - ./PV/fluentd/log:/fluentd/log
#   ⬇️ fluent.conf の配置先である.
#      fluent.conf の中で 34224 への転送設定や転送周期、フィルタ条件などを定義している.
      - ./PV/fluentd/etc:/fluentd/etc
  fluentd2:
    image: fluent/fluentd:v1.13-1
    build: assets/fluentd2
    container_name: myfld_fluentd2
    restart: always
    command: >
      /usr/bin/fluentd -c /fluentd/etc/fluent.conf -v
    ports:
      - "127.0.0.1:34224:34224"
      - "127.0.0.1:34224:34224/udp"
    volumes:
      - ./PV/fluentd2/log:/fluentd/log
#   ⬇️ fluent.conf の配置先である.
#      fluent.conf の中で 34224 からのログ転送を許可している.
      - ./PV/fluentd2/etc:/fluentd/etc

关于 docker-compose.yml 中的 Elasticsearch


  elasticsearch:
    image: elasticsearch:7.14.0
    build: assets/elasticsearch
    container_name: myfld_elasticsearch_fluentd2
    ports:
#     ⬇️ コンテナ側ポートを 29200 にするためには、ここの定義を変えるだけでは不十分だった.
#        そのために、./PV/elasticsearch/config/elasticsearch.yml で 29200 を指定した.
      - "29200:29200"
    environment:
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
#     ⬇️ 公式手順では JVM パラメータは環境変数で設定できるようだが、当方の場合は切り替えできず.
#        docker-compose.yml の記載ミスの疑いが高いが、仕方なく設定ファイル elasticsearch.yml
#        を配置する方法にした.
      - ./PV/elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
#     ⬇️ ローカルボリュームを使うと Java で Exception が生じてしまう. (2021/08 時点では理由不明)
#        外付け SSD でマウントしているからなのだろうか. 本記事とは全く別のコンテナでも同現象が起きた.
#     - ./PV/elasticsearch/data:/usr/share/elasticsearch/data
      - myfld_elasticsearch_fluentd2_vol:/usr/share/elasticsearch/data
#     - "./PV/elasticsearch/config/jvm.options.d:/usr/share/elasticsearch/config/jvm.options.d/"
    depends_on:
      - fluentd
      - fluentd2

volumes:
  myfld_elasticsearch_fluentd2_vol:

关于 docker-compose.yml 文件中的 Kibana 部分


  kibana:
    image: kibana:7.14.0
    container_name: myfld_kibana_fluentd2
    ports:
#     ⬇️ コンテナ側ポートを 29601 にするためには、ここの定義を変えるだけでは不十分だった.
#        そのために、./PV/kibana/config/kibana.yml で 29601 を指定した.
      - "29601:29601"
#     ⬇️ 環境変数だと Kibana サーバのポート変更ができず.
#        そのためにホスト側から /usr/share/kibana/config/kibana.yml をマウントしている.
#   environment:
#     - ELASTICSEARCH_URL=http://elasticsearch:29200
    volumes:
      - ./PV/kibana/config/kibana.yml:/usr/share/kibana/config/kibana.yml
    depends_on:
      - fluentd
      - fluentd2
      - elasticsearch

资产/弹性搜索/Dockerfile

## FROM elasticsearch:7.14.0

## プロキシサーバを使う場合
# ENV http_proxy="http://proxy.co.jp:8080"  
# ENV https_proxy="http://proxy.co.jp:8080"

# ⬇️ 下記コマンドを使って日本語検索プラグイン analysis-kuromoji をインストールした.
RUN elasticsearch-plugin install analysis-kuromoji

资产/流畅腾2/Dockerfile

安装 Fluentd 的 Elasticsearch 插件。

FROM fluent/fluentd:v1.13-1

USER root

RUN gem install fluent-plugin-elasticsearch

资产/网页服务器/Docker构建文件

安装jwilder/dockerize,这是一个用于确认容器启动的工具。

FROM nginx:1.20.0-alpine

## プロキシサーバを使う場合
# ENV http_proxy="http://proxy.co.jp:8080"  
# ENV https_proxy="http://proxy.co.jp:8080"

ENV DOCKERIZE_VERSION v0.6.1
RUN apk add --no-cache openssl \
 && wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
 && tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
 && rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz

PV/elasticsearch/config/elasticsearch.yml的翻译:

持久卷/ Elasticsearch / 配置 / elasticsearch.yml

## 公式ドキュメント: https://www.elastic.co/guide/en/elasticsearch/reference/7.14/important-settings.htm
## 参考記事: http://www.tech-joy.work/article/a20180527115811.html

## ⬇️ 今回は Elasticsearch コンテナは 1個なので single-node と記述する.
## [doc] https://www.elastic.co/guide/en/elasticsearch/reference/current/modules-discovery-settings.html
discovery.type: "single-node"

## ⬇️ ヒープのみ使用しスワップは使わない.
##    Dockerでの運用だとどうなるのか不明だが、true としている人が多いので定義をしてみる.
##    swapoff -a を恒久設定しておく.
bootstrap.memory_lock: true 

## ⬇️ クラスタ名. 目的に応じたクラスタ名が良いとはある.
cluster.name: "docker-cluster"

## ⬇️ どの NIC から待ち受けするかを定義する. 0.0.0.0 の場合は全ての NIC となる. 
## [doc] https://www.elastic.co/guide/en/elasticsearch/reference/7.14/modules-network.html
network.host: 0.0.0.0

## ⬇️ HTTP Client との通信用ポート. 指定が無ければ 9200-9300 のポートを使う.
## [doc] https://www.elastic.co/guide/en/elasticsearch/reference/7.14/modules-network.html
http.port: 29200

## ⬇️ 「xpack.monitoring.enabled: true」は deprecated とある.
##     代わりに下記を使えば良いのだと思う.
## [doc] https://www.elastic.co/guide/en/elasticsearch/reference/current/monitoring-settings.html
xpack.monitoring.collection.enabled: true

## ⬇️ watcher は通知に関する設定である.
## [doc] https://www.elastic.co/guide/en/elasticsearch/reference/7.14/notification-settings.html
xpack.watcher.enabled: true

## ⬇️ インデックス削除のときに「*」による指定を認めない(true). 
## [doc] https://www.elastic.co/guide/en/elasticsearch/reference/7.14/index-management-settings.html
action.destructive_requires_name: true

PV/Fluentd等/Fluent.conf

定义对来自24224端口的输入的行为

## ⬇️ 24224 ポートからの入力を待ち受ける
<source>
  @type forward
  port 24224
</source>

## ⬇️ docker-compose.yml にてタグを定義していたはずである
<match docker.myfld_nginx> #.......... フィルタ条件のタグを「docker.myfld_nginx」に絞ってしまう
  @type forward
  buffer_type file #.................................... ファイルバッファにする
  buffer_path /fluentd/log/fluentd-nginx.*.buffer #..... バッファファイルの出力先
  flush_interval 1s #................................... 1秒ごとにバッファをフラッシュする
  <server>
    name aggregate2
    host fluentd2 #..................................... 転送先マシンの名前
    port 34224 #........................................ 転送先のポート
  </server>
</match>

PV/fluentd2/etc/fluent.conf 的污染物/流畅.conf

监视从34224端口的输入,并在匹配的标记下将其输出到标准输出。

<source>
  @type forward
  port 34224
</source>

<match docker.**>
  @type stdout
</match>

PV/kibana/config/kibana.yml
永久卷/kibana/配置/kibana.yml

我尝试在docker-compose.yml中设置环境变量,但行为没有改变。
因此,我直接在配置文件中进行了设置。

#
# ** THIS IS AN AUTO-GENERATED FILE **
#

# Default Kibana configuration for docker target
server.host: "0"
server.port: "29601"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://elasticsearch:29200" ]

请用汉语将以下内容进行同义改写,只需提供一种选项:
Please bring me a glass of water.

进行Docker镜像构建和容器启动。

$ cd qiita-efk.git
$ docker-compose build --no-cache
$ docker-compose up -d

4. 访问 Kibana.

等待大约4分钟,直到上述3个容器启动完成后,如果能够访问下面的URL并启动Kibana的Dev Tools,则表示一切正常。

・http://localhost:29601/app/dev_tools#/console can be paraphrased in Chinese as: “本地主机:29601/app/dev_tools#/控制台”

确认Nginx日志已经发送到Fluentd的34224端口。

对于Fluentd的行为进行确认,但是这里先记录下来。

5-1. 监控Fluentd 34224端口的标准输出。

$ docker-compose -f logs fluentd2

5-2. 通过 WEB-UI 访问 http://localhost:21337

请确认在上述5-1的控制台上是否输出了Nginx的访问日志。

以上

请提供参考书籍和网站。

hé .

URL一言https://qiita.com/sanyamarseille/items/1c4c31547502791ecac6
https://www.elastic.co/guide/en/elastic-stack-get-started/current/get-started-docker.html
https://qiita.com/suzuki_y/items/6365799485fa3973b916
https://qiita.com/sugikeitter/items/f3b2c57bf8bbdc47a8bc
https://github.com/sugikeitter/elasticsearch-kibana-docker/blob/master/docker-compose.yml
https://gitya107.hatenablog.com/entry/2018/06/15/170334
http://ittoo.jugem.jp/?eid=737
https://qiita.com/kaibadash@github/items/9cfb532696dc8711e408日本語検索を可能にするhttps://qiita.com/mserizawa/items/8335d39cacb87f12b678日本語検索を可能にするhttps://github.com/deviantony/docker-elkELK を構築するための docker-compose が公開されているhttps://dev.classmethod.jp/articles/es-01/index, document, type の説明が簡潔に RDMS に例えられていて良かったhttp://www.tech-joy.work/article/a20180527115811.html/etc/elasticsearch/elasticsearch.yml の記述例と説明ありhttps://qiita.com/Esfahan/items/3c07bfbb57c7098e95313台に Elasticsearch を導入した場合の手順ありhttps://stackoverflow.com/questions/52621299/date-is-not-appending-to-elasticsearch-index-name-while-using-td-agentfluent.conf で %Y%m%d 展開できない問題の対策であるhttps://wyukawa.hatenablog.com/entry/2019/07/03/162511Elasticsearch 7 からはタイプが無くなるので、fluent.conf での記述方法が記されている

以下是一种中国原生的转述方式:

在本地环境中进行嵌入式设备开发的 DevOps 工作。
广告
将在 10 秒后关闭
bannerAds