Armadilloフォーラム

長期運用時の注意点に関して

iwaya_yoke

2024年11月14日 13時32分

==========
製品型番:A6E
Debian/ABOSバージョン:3.20.2-at.2
カーネルバージョン:Linux armadillo 5.10.224-0-at
==========

長期運用の注意点に関して、以下教えていただけないでしょうか?
pythonのprintなどで標準出力している場合、podmanでデータを保持していると理解しています。
これは長期運用時にデータが肥大化してしまう可能性があるので、標準出力をしないようにすべきでしょうか?

もしそうであれば、大きめの容量のSDカードを用意して、標準出力はやめて、SDカードのログファイルに書き込むだけにしようかと考えています。
もしくはpodman logsの情報をSDカードに変更するなどを考えていますが、やり方がわかっていません。

ご教授いただけると助かります。

コメント

at_dominique.m…

2024年11月14日 13時48分

iwaya_yokeさん

お世話になっています、
マルティネです。

> pythonのprintなどで標準出力している場合、podmanでデータを保持していると理解しています。
> これは長期運用時にデータが肥大化してしまう可能性があるので、標準出力をしないようにすべきでしょうか?

標準出力のログに関してはそのまま出力して問題ありません。

「podman logs」の情報はディスクに保存してません。
メモリ上の /run ディレクトリに(デフォルトでは)1MB まで保存して、出力が 1MBを越えた場合に同じメモリを再利用します。

その 1MB の設定はコンテナのコンフィグファイルの set_log_max_size で変更可能です。

標準出力以外のところでログが保存されている場合は注意が必要ですので、逆に標準出力を多く使っていただいた方がいいと考えています。

ファイルが増えないことを保証したい場合はコンテナコンフィグに「set_readonly yes」を追加すると、コンテナのデータはボリュームにしか書込みできなくなりますが、調整無しでは多くのプログラムが書込みできないとエラーしてしまいますのでそのコンテナを読み取り専用の設定は標準で推奨してません。

よろしくお願いします。

マルティネさん

早速ご回答ありがとうございます。
標準出力を使用したほうが良いこと理解しました。

標準出力以外でデフォルト設定から変更しておいた方がよい設定などありましたら、教えていただけないでしょうか?

at_dominique.m…

2024年11月14日 14時30分

iwaya_yokeさん

> 標準出力以外でデフォルト設定から変更しておいた方がよい設定などありましたら、教えていただけないでしょうか?

デフォルト設定は開発した際に決めました設定ですので、基本的には推奨設定のままになります。※
あえて変更した方がいい設定はありません。

※ Armadillo Base OS で起動するコンテナのデフォルトは podman のデフォルトではありません。
今回のログの設定もそうです。
他にいくつか細かい点ありますが、大きいところとしてはコンテナのメインコマンドが失敗した場合にコンテナを自動的に再起動するぐらいです。

推奨ではありませんが、気になる場合は実装できる設定はこの二つぐらいです:
* 先ほど説明した読み取り専用設定(set_readonly)
* 定期的にコマンドを実効して失敗の対応を決める (armadillo の再起動など) (set_healthcheck)

すみませんが使い方の詳細はマニュアルで確認してください:
https://manual.atmark-techno.com/armadillo-iot-a6e/armadillo-iotg-a6e_p…

なにか疑問あればまた聞いてください。

よろしくお願いします

マルティネさん

ありがとうございます。
set_healthcheckは検討の余地がありそうなので、調べてみます。

マルティネさん

set_healthcheckについて検討しているのですが、以下教えていただけないでしょうか?
・コンテナのヘルスチェックは具体的にどのようなチェックをするのでしょうか?
コンテナがエラーとかで停止していたら、failするとかになりますか?
・コンテナが複数ある場合はどのように処理が行われますか?

at_dominique.m…

2024年11月15日 14時53分

iwaya_yokeさん

マルティネです。

> ・コンテナのヘルスチェックは具体的にどのようなチェックをするのでしょうか?

アプリケーションによりますので何ともいめませんが、例えばウェブサーバーが入ってる場合にヘルスチェックエンドポイントを作ってこの set_healthcheck コマンドで定期的に curl でそちらを確認して、連続で何回か失敗した場合に再起動するなどの想定です。
curl じゃなくても、アプリケーションがちゃんと動作していることを確認できればいいので、

こういう確認が難しい場合はもしかしたら /dev/watchdog0 をアプリケーションから操作した方が作りとして楽かもしれません。

> コンテナがエラーとかで停止していたら、failするとかになりますか?

コンテナがエラーで停止する場合はデフォルトで再起動されてます(healthcheck と関係なく)ので、こういう失敗はあまりないと思いますが、停止される場合はコンテナの再起動を待つだけの実装になっています。
開発時はそれで余計な再起動を防ぎますのでそれがいいと考えていましたが、確かに運用としてはなにかの想定外のエラーに備えてエラーにした方がよさそうですね…

すみませんこちらに関してはしばらく改善する時間はありませんが、ちょっと余裕できたら見直して影響を確認した上に設定を追加するかデフォルトの動作を変更しようと思います。

> ・コンテナが複数ある場合はどのように処理が行われますか?

この設定はコンテナのコンフィグに入っていて、設定したコマンドは対処コンテナ内に実効されます。
複数のコンテナがある場合はどれかのコンテナから他のコンテナの連携を確認するか、各コンテナに set_healthcheck を設定して別々にコマンドを実効できます。

よろしくお願いします。