※当サイトの記事には、広告・プロモーションが含まれます。

Zabbixでの収集の絡みからDockerコンテナのログファイル名と出力先を変更したかったが...

www.itmedia.co.jp

スウェーデン王立科学アカデミーは10月8日(日本時間)、2024年のノーベル物理学賞に、カナダ・トロント大学のジェフリー・ヒントンさんと米プリンストン大学のジョン・ホップフィールドさんを選出したと発表した。2人はともに、現在のAIの基礎技術となるニューラルネットワーク研究の第一人者。

2024年のノーベル物理学賞は“AIの父”、ジェフリー・ヒントンなどが受賞 - ITmedia AI+

⇧ 何と言うか、

ジェフリー・エヴァレスト・ヒントンGeoffrey Everest Hinton1947年12月6日 - )は、イギリス生まれのコンピュータ科学および認知心理学の研究者。ニューラルネットワークの研究を行っており、人工知能(AI)研究の第一人者とみなされているトロント大学名誉教授(2022年時点)。2024年にジョン・ホップフィールドとともにノーベル物理学賞を受賞した。

ジェフリー・ヒントン - Wikipedia

業績

ヒントンは、デビッド・ラメルハートおよびロナルド・J・ウィリアムズ英語版と共に、多層ニューラルネットワークの学習における誤差逆伝播法を普及させた、1986年に出版された非常に引用数の多い論文の共著者であった

ジェフリー・ヒントン - Wikipedia

⇧ 業績を見るに、もっと早い段階で受賞でも良かったような気はしますな...

Zabbixはzabbix agentが対象を監視し、zabbix serverが情報を集約していると思っていたが、zabbix agent無しでも監視はできるらしい

Wikipediaによると、

Zabbix はアレクセイ・ウラジシェフ(Alexei Vladishev)によって作られた、ネットワーク管理ソフトウェアである。様々なネットワークサービス、サーバ 、その他のネットワークハードウェアのステータスを監視・追跡できる。現在はウラジシェフが設立したZabbix社によって開発が継続されている。

Zabbix - Wikipedia

概要

Zabbixはデータ格納のためMySQLPostgreSQLSQLiteOracleを利用する。バックエンドはC言語で、WebフロントエンドPHPで書かれている。

Zabbix - Wikipedia

Zabbixにはいくつかの監視方法がある。シンプルチェックは監視対象にソフトウェアをインストールする必要なく、SMTPやHTTPなどの標準サービスで、可用性と応答性の確認をすることが可能。ZabbixエージェントUNIXWindows等の監視対象にインストールすれば、CPUロード、 ネットワーク使用率、ディスク容量などのようなステータスの監視も可能。

Zabbix - Wikipedia

Zabbixは監視対象にエージェントのインストールを行わずに、SNMPTCPICMP経由、IPMI、SSHtelnetを利用した監視もサポートしている。また、ZabbixはXMPPを含む様々なリアルタイム通知メカニズムを有している。

Zabbix - Wikipedia

ZabbixのライセンスGNU General Public Licenseバージョン2である。

Zabbix - Wikipedia

⇧ とあり、zabbix agentのインストールをせずとも監視ができるはできるらしい。

構成

Zabbixは複数の独立したモジュールで構成されている。

  • サーバ
  • エージェント
    • C言語で書かれた Zabbix agent と、Go言語で書かれた Zabbix agent2 の2種類がある
  • フロントエンド
  • プロキシ

サーバ、エージェント、及びプロキシは C言語で書かれており、フロントエンドはPHPJavaScriptで実装されている。

Zabbix - Wikipedia

⇧ まさかのC言語

バージョンに依りけりなのか分かりませんが、

www.zabbix.com

⇧ Webhookで通知機能っぽいことも実現している模様。

Wikipediaの情報によると、zabbix agentをインストールせずとも監視はできるらしいのですが、

blog.zabbix.com

⇧ zabbix agentを監視対象の機器にインストールするのが一般的なんですかね?

Dockerコンテナで動作するzabbix agentのtemplateがあるらしいが...

そもそも、Zabbixのtemplateって何なのか?

www.zabbix.com

Overview

The use of templates is an excellent way of reducing one's workload and streamlining the Zabbix configuration. A template is a set of entities that can be conveniently applied to multiple hosts.

https://www.zabbix.com/documentation/current/en/manual/config/templates

⇧ Zabbix自体の作業負担を軽減する目的のものらしい。

ドキュメントの左サイドバーには、

⇧ 全部で、8つのtemplateが紹介されている。

で、「agent 2 template」では、Dockerコンテナ上で稼働するものがあるらしいのですが、

blog.zabbix.com

Since we will be using the official Docker by Zabbix agent 2 template, first, we need to make sure that the template is actually available in our Zabbix instance. The template is available for Zabbix versions 5.0, 5.4, and 6.0

https://blog.zabbix.com/docker-container-monitoring-with-zabbix/20175/

⇧ 何やら、Dockerコンテナを再起動するケースで不具合が起こるらしく、この事象に対しての回答が無いので、改善されているのかが分からない...

www.zabbix.com

The template to monitor Docker engine by Zabbix that work without any external scripts. Most of the metrics are collected in one go, thanks to Zabbix bulk data collection.

Template Docker by Zabbix agent 2 — collects metrics by polling zabbix-agent2.

https://www.zabbix.com/integrations/docker

git.zabbix.com

⇧ Docker Composeを利用していそうではある。

Dockerコンテナのログファイル名と出力先を変更したかったが...

で、Dockerコンテナの再起動による「official Docker by Zabbix agent 2 template」の不具合が改善されていないとすると、

forums.docker.com

⇧ 上記サイト様にありますように、

/var/lib/docker/containers/[container id]/[container id]-json.log    

といった感じで、Dockerコンテナ起動の度に、DockerコンテナのIDが変わるからして、Zabbixで上手くログを監視、収集できないのでは無いかという懸念がありますと。

で、調べた感じでは、

qiita.com

docs.docker.com

stackoverflow.com

⇧ 上記サイト様によりますと、

  1. Dockerコンテナのログの出力内容
    → logging driverの変更が必要
  2. Dockerコンテナのログの出力先
    → Docker Composeをバックグラウンドで実行時に出力先を指定 ※1

※1 multilogという外部ライブラリが必要

ができるらしいが、「2. Dockerコンテナログの出力先」については、Dockerの想定していない方法だと思われるので、実質不可能と言っても過言ではないかと。

ネットの情報を漁った感じでは、

knowledge.sakura.ad.jp

ここでは「-v /var/fluentd:/fluentd/log」オプションを使い、Dockerホストの/var/fluentdディレクトリをコンテナ内の/fluentd/logディレクトリにマウントすることで、記録したログを永続的に残せるよう設定している。

Dockerコンテナのロギング機能を使ってみる | さくらのナレッジ

⇧ ホストのディレクトリにコンテナのログ出力先のディレクトリをマウントできるという話があったのですが、「logging driver」が「Fluentd」以外でも可能なのかが分からない...

docs.docker.com

⇧ ホスト名などがログとして出力できるのかが分からない...

それにしても、Dockerの公式のドキュメントもなかなかに酷いですな...

少なくとも、Dockerコンテナログのデフォルトの出力先が

「/var/lib/docker/containers/[container id]/[container id]-json.log」

ということは、公式のドキュメントに載せておくべきな気がするんだが...

2024年10月9日(水)追記:↓ ここから

ネットの情報を漁った感じでは、

christina04.hatenablog.com

主に以下の3通りになると思います。

  1. コンテナ内に保存
  2. volume先に指定してに永続保存
  3. log driverを使って転送

dockerのlog周りの対応 - Carpe Diem

⇧ 3つの方法がメジャーっぽい。

で、「logging driver」の変更については、

docs.docker.jp

⇧ まさかのログ出力コマンドが対応している「logging driver」の制約があるという衝撃の事実...

「logging driver」の変更の影響範囲については、

qiita.com

log driverは以下の通り、個別に設定する方法と、システム全体で指定する方法があります。

  1. docker composeファイルに記述(個別)
  2. docker runコマンドで起動時に指定(個別)
  3. docker daemon.json設定ファイルに記述(システム全体)

Dockerのlogdriverを全て試してログの保存方法を考える #Fluentd - Qiita

⇧ 上記サイト様によりますと、

  1. Dockerコンテナ単位
  2. Dockerホスト単位

のいずれかになるそうな。

Dockerの「deamin.json」ファイルで設定する場合は、「2. Dockerホスト単位」、つまり、全てのDockerコンテナに影響すると。

ちなみに、

docs.docker.com

⇧「logging driver」が正式名称ってことで良いんだよね?

「log driver」って情報が多いんだが、公式のドキュメントだと「logging driver」ってなってるし...

2024年10月9日(水)追記:↑ ここまで

2024年10月10日(木)追記:↓ ここから

ちなみに、

github.com

⇧ そもそも論として、Dockerコンテナのログの出力先の変更は想定していないっぽい...

2024年10月10日(木)追記:↑ ここまで

毎度モヤモヤ感が半端ない…

今回はこのへんで。