クラスターのロギング
IBM Cloud® Kubernetes Service でロギングをセットアップすると、問題のトラブルシューティングや、Kubernetes クラスターとアプリの正常性とパフォーマンスの改善に役立ちます。
継続的なモニタリングとロギングは、クラスターへの攻撃を検出し、問題が発生したときに問題をトラブルシューティングするために重要です。 クラスターを継続的にモニターすることによって、クラスターの容量、およびアプリで使用可能なリソースの可用性をよく把握することができます。 この情報があれば、アプリのダウン時間の発生を防ぐために準備できます。
ロギング・ソリューションの選択
デフォルトでは、すべての IBM Cloud Kubernetes Service クラスター・コンポーネント (ワーカー・ノード、コンテナー、アプリケーション、永続ストレージ、Ingress アプリケーション・ロード・バランサー、Kubernetes API、および kube-system
名前空間) について、ログがローカルに生成され、書き込まれます。 これらのログを収集し、転送して表示するために提供されているロギング・ソリューションが複数あります。
- IBM Cloud Logs
- IBM Cloud Logs のインスタンスをデプロイし、Kubernetes Service のクラスターにそのインスタンスを構成して、ポッド・コンテナーのログを管理します。 ロギング・エージェントが、
*.log
を含むすべての名前空間から、ポッドの/var/log
ディレクトリーに保管されている拡張子なしのファイルと拡張子kube-system
のログを収集します。 その後、エージェントはログをサービス・インスタンスに転送する。 また、クラスタ内で行われたユーザー主導の管理アクティビティを追跡することもできます Kubernetes Serviceはクラスタ管理イベントを自動的に生成し、これらのイベントログIBM Cloud Logs に転送します。 詳しくは、IBM Cloud Logs の紹介を参照してください。 クラスターにロギングエージェントをデプロイするには Red Hat OpenShift on IBM Cloudロギングエージェントの管理 」または IBM Cloud Kubernetes Service クラスターのロギングエージェントの管理」 を参照してください。 - Fluentd と外部サーバーの組み合わせ
- クラスター・コンポーネントのログの収集、転送、表示のために、Fluentd を使用してロギング構成を作成できます。 ロギング設定を作成すると Fluentd クラスタ・コンポーネントは指定されたソースのパスからログを収集します。 Fluentd そして、これらのログを、 プロトコルを受け付ける外部サーバーに転送することができる。
syslog
まず始めに 、「外部サーバーへのログ転送の理解」 をご覧ください。
ログ収集および監視エージェントをCloud Logsに移行する
observability CLI プラグイン ibmcloud ob
と v2/observe
エンドポイントはサポートされなくなりました。 直接的な代替品はありませんが、コンソールまたは Helm のチャートから、ロギングとモニタリングの統合を管理できるようになりました。 最新の手順については 、「 IBM Cloud Kubernetes Service クラスターのログ収集エージェントの管理 」および 「 Kubernetes モニタリングエージェントの使用」 を参照してください。
ob
プラグイン、Terraform、またはAPIを使用して、クラスタに監視エージェントをインストールしたり、既存の構成を変更したりすることはできなくなりました。 Sysdig エージェントは引き続き、指定された IBM Cloud Monitoring インスタンスにメトリクスを送信します。 LogDNA IBM Cloud Log Analysis が に置き換えられたため、エージェントはログを送信できなくなりました。 IBM Cloud
観測用プラグインエージェントの削除
-
ob plugin
のサポート終了後は、各コンポーネントを個別に削除する必要があります。- デーモンセットとコンフィグマップをクリーンアップする。
kubectl delete daemonset logdna-agent -n ibm-observe kubectl delete daemonset sysdig-agent -n ibm-observe kubectl delete configmap <logdna-configmap> -n ibm-observe kubectl delete configmap <sysdig-configmap> -n ibm-observe
- オプション:名前空間を削除します。 その名前空間で実行中のリソースが他にない場合。
kubectl delete namespace ibm-observe
- デーモンセットとコンフィグマップをクリーンアップする。
プラグインが削除された後、クラスタダッシュボード、Terraform、または手動で、クラスタにロギングエージェントとモニタリングエージェントを再インストールします。
詳しくは、以下のリンクを参照してください。
外部サーバーへのクラスターとアプリのログの転送
IBM Cloud Kubernetes Service の標準クラスターから外部サーバーへのログ転送を構成します。
外部サーバーへのログ転送について
外部サーバに転送するためにクラスタ内のソースに対してロギング構成を作成すると、クラスタ内にコンポーネントが作成されます。 Fluentd コンポーネントがクラスタ内に作成されます。 Fluentd は、そのソースのパスからログを収集し、そのログを外部サーバーに転送します。 ソースからロギング・サービスの取り込みポートへのトラフィックは暗号化されます。
- ログ転送を設定できるソースは何ですか?
- 以下の画像では、ロギングを設定できるソースの領域が表示されています。
-
worker
: ユーザーがワーカー・ノードに指定したインフラストラクチャー構成に固有の情報。 ワーカー・ログはsyslog
、オペレーティング・システム・イベントを含む。auth.log
には、OS に対して行われた認証要求に関する情報が含まれます。パス
/var/log/syslog
/var/log/auth.log
-
container
:実行中のコンテナによって記録される情報 :STDOUT
またはSTDERR
に書き込まれるもの。 -
application
: アプリケーション・レベルで発生するイベントに関する情報。 これは、ログインに成功したなどのイベントが発生したことの通知、ストレージに関する警告、またはアプリレベルで実行可能なその他の操作である可能性があります : ログが転送されるパスを設定できます。 ただし、ロギング構成で絶対パスを使用しないとログが送信されないため、ログを読み取ることができません。 パスがワーカーノードにマウントされている場合、シンボリックリンクが作成されている可能性があります。 例指定されたパスが/usr/local/spark/work/app-0546/0/stderr
であるにもかかわらず、ログが実際には/usr/local/spark-1.0-hadoop-1.2/work/app-0546/0/stderr
に移動する場合、ログを読み取ることはできません。 -
storage
: クラスター内にセットアップされた永続ストレージに関する情報。 ストレージ・ログは、DevOps パイプラインおよび製品リリースの一部として問題判別ダッシュボードおよびアラートをセットアップするのに役立ちます。 注: パス/var/log/kubelet.log
および/var/log/syslog
にもストレージ・ログが含まれていますが、これらのパスにあるログはkubernetes
およびworker
ログ・ソースによって収集されます。- パス
-
/var/log/ibmc-s3fs.log
/var/log/ibmc-block.log
- ポッド **
-
portworx-***
ibmcloud-block-storage-attacher-***
ibmcloud-block-storage-driver-***
ibmcloud-block-storage-plugin-***
ibmcloud-object-storage-plugin-***
-
kubernetes
: ワーカー・ノードの kube-system 名前空間内で発生する kubelet、kube-proxy、その他の Kubernetes イベントからの情報。- パス
-
/var/log/kubelet.log
/var/log/kube-proxy.log
/var/log/event-exporter/1..log
-
ingress
: Ingress ALB を介してクラスターに伝送されるネットワーク・トラフィックに関する情報。- パス
-
/var/log/alb/ids/*.log
/var/log/alb/ids/*.err
/var/log/alb/customerlogs/*.log
/var/log/alb/customerlogs/*.err
-
kube-audit
: Kubernetes API サーバーに送信されるクラスター関連アクションに関する情報。時間、ユーザー、および影響を受けるリソースを含みます。kube-audit
ソースは、Webhook を使用して構成できます。 詳しくは、「外部サーバーへの Kubernetes API 監査ログの転送 (Forwarding Kubernetes API audit logs to an external server)」を参照してください。
- Fluentd を更新し続ける責任は私にありますか?
- ロギングやフィルターの構成を変更するには、Fluentd ロギング・コンポーネントが最新バージョンである必要があります。 デフォルトでは、このアドオンに対する自動更新が有効になっています。 自動更新を使用不可にするには、クラスターのコンポーネントの更新: ロギング用の Fluentdを参照してください。
- クラスタ内の1つのソースから、一部のログを転送し、他のログを転送しないことはできますか?
- はい。 例えば、特にログ量の多いポッドがある場合に、そのポッドのログでログ・ストレージ・スペースが占有されないようにして、他のポッドのログを転送したいことがあります。 特定のポッドのログを転送しないようにする方法については、ログのフィルタリングを参照してください。
クラスターとアプリのログの転送
クラスターとアプリのロギングの構成を作成します。 オプションを使って、異なるロギング・オプションを区別することができる。
ロギングを構成する際に使用できる各種オプションとその説明は、次の表のとおりです。
パラメーター | 説明 |
---|---|
<cluster_name_or_ID> |
クラスターの名前または ID。 |
--logsource |
ログの転送元になるソース。 指定可能な値は、container 、application 、worker 、kubernetes 、ingress 、および storage です。 このオプションは、コンフィギュレーションに適用するログソースをカンマで区切ったリストをサポートする。 ログ・ソースを指定しない場合、 container および ingress のログ・ソースのロギング構成が作成されます。 |
--type syslog |
syslog という値を指定することで、ログが外部サーバーに転送されます。 |
--namespace |
オプション: ログの転送元になる Kubernetes 名前空間。 ログ転送は、Kubernetes 名前空間 ibm-system と kube-system ではサポートされていません。 この値は、container ログ・ソースについてのみ有効です。 名前空間を指定しないと、クラスター内のすべての名前空間でこの構成が使用されます。 |
--hostname |
ログ・コレクター・サービスのホスト名または IP アドレスを指定します。 |
--port |
取り込みポート。 ポートを指定しない場合は、標準ポート 9091 が使用されます。 syslog の場合は、ログ・コレクター・サーバーのポートを指定します。 ポートを指定しない場合は、標準ポート 514 が使用されます。 |
--app-containers |
オプション: アプリのログを転送するには、アプリが含まれているコンテナーの名前を指定します。 コンマ区切りのリストを使用して複数のコンテナーを指定できます。 コンテナーを指定しない場合は、指定したパスが入っているすべてのコンテナーのログが転送されます。 |
--app-paths |
アプリがログを書き込むコンテナー上のパス。 ソース・タイプが application のログを転送するには、パスを指定する必要があります。 複数のパスを指定するには、/var/log/myApp1/*,/var/log/myApp2/* のようにコンマ区切りリストを使用します。 |
--syslog-protocol |
ロギング・タイプが syslog< の場合は、トランスポート層プロトコル。 udp 、tls 、または tcp の各プロトコルを使用できます。 udp プロトコルで rsyslog サーバーに転送する場合、 1KB を超えるログは切り捨てられます。 |
--ca-cert |
必須: ロギング・タイプが syslog で、プロトコルが tls である場合、認証局証明書を含む Kubernetes シークレット名。 |
--verify-mode |
ロギング・タイプが syslog で、プロトコルが tls である場合、検証モード。 サポートされる値は verify-peer で、デフォルトは verify-none 。 |
--skip-validation |
オプション: 組織名とスペース名が指定されている場合にそれらの検証をスキップします。 検証をスキップすると処理時間は短縮されますが、ロギング構成が無効な場合、ログは正しく転送されません。 |
udp
または tcp
プロトコルを介してユーザー自身のサーバーにログを転送する
-
エディターまたは管理者の IBM Cloud IAM プラットフォーム・アクセス役割があることを確認してください。
-
ログ・ソースがあるクラスターの場合: アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。
-
syslog
プロトコルを受け付けるサーバーを、2つの方法のいずれかで設定する:-
独自のサーバーをセットアップして管理するか、プロバイダーが管理するサーバーを使用します。 プロバイダーがサーバーを管理する場合は、ロギング・プロバイダーからロギング・エンドポイントを取得します。
-
コンテナから
syslog
を実行する。 たとえば、この デプロイメント.yaml ファイルを使用して、クラスタ内のコンテナを実行する Docker パブリックイメージを取得できます。 このイメージは、パブリック・クラスター IP アドレスのポート514
を公開し、このパブリック・クラスター IP アドレスを使用して syslog ホストを構成します。
syslog
の接頭辞を取り除くことで、有効なJSONとしてログを見ることができます。 そのためには、rsyslog
サーバーが実行されているetc/rsyslog.conf
ファイルの先頭に、以下のコードを追加する:$template customFormat,"%msg%\n"$ActionFileDefaultTemplate customFormat
-
ログ転送構成を作成します。 パラメーターについて詳しくは、ロギング構成オプションの表についてを参照してください。
ibmcloud ks logging config create --cluster <cluster_name_or_ID> --logsource <log_source> --namespace <kubernetes_namespace> --hostname <log_server_hostname_or_IP> --port <log_server_port> --type syslog --app-containers <container1,2> --app-paths <paths_to_logs> --syslog-protocol <protocol> --skip-validation
tls
プロトコルを介してユーザー自身のサーバーにログを転送する
-
以下の IBM Cloud IAM 役割があることを確認します。
- クラスターに対するエディターまたは管理者のプラットフォーム・アクセス役割
- ** 名前空間に対するライターまたは**管理者
kube-system
のサービス・アクセス役割
-
ログ・ソースがあるクラスターの場合: アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。
-
syslog
プロトコルを受け付けるサーバーを、2つの方法のいずれかで設定する:-
独自のサーバーをセットアップして管理するか、プロバイダーが管理するサーバーを使用します。 プロバイダーがサーバーを管理する場合は、ロギング・プロバイダーからロギング・エンドポイントを取得します。
-
コンテナから
syslog
を実行する。 たとえば、この デプロイメント.yaml ファイルを使用して、クラスタ内のコンテナを実行する Docker パブリックイメージを取得できます。 イメージはパブリック・クラスタIPアドレスでポート514
を公開し、このパブリック・クラスタIPアドレスを使用してsyslog
ホストを設定します。 関連する認証局証明書およびサーバー・サイド証明書を注入し、syslog.conf
を更新して、サーバー上でtls
を有効にする必要があります。
-
-
認証局証明書を
ca-cert
という名前のファイルに保存します。 この名前のとおりでなければなりません。 -
kube-system
ファイル用のシークレットをca-cert
名前空間に作成します。 ロギング設定を作成するとき、--ca-cert
オプションにシークレット名を使用する。kubectl -n kube-system create secret generic --from-file=ca-cert
-
ログ転送構成を作成します。 パラメーターについて詳しくは、ロギング構成オプションの表についてを参照してください。
ibmcloud ks logging config create --cluster <cluster name or id> --logsource <log source> --type syslog --syslog-protocol tls --hostname <ip address of syslog server> --port <port for syslog server, 514 is default> --ca-cert <secret name> --verify-mode <defaults to verify-none>
転送されるログのフィルタリング
一定期間における特定のログをフィルターで除外することで、外部サーバーに転送するログを選択できます。 オプションを使って、さまざまなフィルタリングオプションを区別することができる。
パラメーター | 説明 |
---|---|
<cluster_name_or_ID> |
必須: ログをフィルターに掛けるクラスターの名前または ID。 |
<log_type> |
フィルターを適用するログのタイプ。 現在、all 、container 、host がサポートされています。 |
<configs> |
オプション: ロギング構成 ID のコンマ区切りのリスト。 指定しない場合、フィルターに渡されたすべてのクラスター・ロギング構成にフィルターが適用されます。 フィルターと一致するログ構成を表示するには、--show-matching-configs オプションを使用します。 |
<kubernetes_namespace> |
オプション: ログの転送元になる Kubernetes 名前空間。 このオプションは、ログタイプ container を使用している場合にのみ適用されます。 |
<container_name> |
オプション: ログをフィルタリングするコンテナーの名前。 |
<logging_level> |
オプション: 指定したレベル以下のログをフィルターで除外します。 指定できる値は、規定の順に fatal 、error 、warn/warning 、info 、debug 、trace です。 例えば、info レベルのログをフィルタリングした場合、debug と
trace もフィルタリングされます。 注釈 このオプションは、ログ・メッセージが JSON 形式で、レベル・フィールドを含む場合にのみ使 用できます。 メッセージをJSONで表示するには、 --output json オプションをコマンドに追加する。 |
<message> |
オプション: 正規表現で記述された指定メッセージが含まれるログをフィルターで除外します。 |
<filter_ID> |
オプション: ログ・フィルターの ID。 |
--show-matching-configs |
オプション: 各フィルターが適用されるロギング構成を表示します。 |
--all |
オプション: すべてのログ転送フィルターを削除します。 |
-
ロギング・フィルターを作成します。
ibmcloud ks logging filter create --cluster <cluster_name_or_ID> --type <log_type> --logging-configs <configs> --namespace <kubernetes_namespace> --container <container_name> --level <logging_level> --regex-message <message>
-
作成したログ・フィルターを表示します。
ibmcloud ks logging filter get --cluster <cluster_name_or_ID> --id <filter_ID> --show-matching-configs
-
作成したログ・フィルターを更新します。
ibmcloud ks logging filter update --cluster <cluster_name_or_ID> --id <filter_ID> --type <server_type> --logging-configs <configs> --namespace <kubernetes_namespace --container <container_name> --level <logging_level> --regex-message <message>
-
作成したログ・フィルターを削除します。
ibmcloud ks logging filter rm --cluster <cluster_name_or_ID> --id <filter_ID> [--all]
ログ転送構成の確認、更新、および削除
ログ転送の確認
以下の 2 つのうちいずれかの方法で、構成が正しくセットアップされていることを確認できます。
- クラスター内のすべてのロギング構成をリスト表示する場合には、以下のようにします。
ibmcloud ks logging config get --cluster <cluster_name_or_ID>
- 1 つのタイプのログ・ソースのロギング構成をリストする場合には、以下のようにします。
ibmcloud ks logging config get --cluster <cluster_name_or_ID> --logsource <source>
ログ転送の更新
既に作成したロギング構成を以下のように更新できます。
ibmcloud ks logging config update --cluster <cluster_name_or_ID> --id <log_config_id> --namespace <namespace> --type <server_type> --syslog-protocol <protocol> --logsource <source> --hostname <hostname_or_ingestion_URL> --port <port> --app-containers <container1,2> --app-paths <paths_to_logs>
ログ転送の削除
クラスターの 1 つまたはすべてのロギング構成を削除することにより、以下のようにログの転送を停止できます。
- 1 つのロギング構成を削除するには、以下のようにします。
ibmcloud ks logging config rm --cluster <cluster_name_or_ID> --id <log_config_ID>
- すべてのロギング構成を削除するには、以下のようにします。
ibmcloud ks logging config rm --cluster <my_cluster> --all