IBM Cloud Docs
クラスターのロギング

クラスターのロギング

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 obv2/observe エンドポイントはサポートされなくなりました。 直接的な代替品はありませんが、コンソールまたは Helm のチャートから、ロギングとモニタリングの統合を管理できるようになりました。 最新の手順については 、「 IBM Cloud Kubernetes Service クラスターのログ収集エージェントの管理 」および 「 Kubernetes モニタリングエージェントの使用」 を参照してください。

ob プラグイン、Terraform、またはAPIを使用して、クラスタに監視エージェントをインストールしたり、既存の構成を変更したりすることはできなくなりました。 Sysdig エージェントは引き続き、指定された IBM Cloud Monitoring インスタンスにメトリクスを送信します。 LogDNA IBM Cloud Log Analysis が に置き換えられたため、エージェントはログを送信できなくなりました。 IBM Cloud

観測用プラグインエージェントの削除

  • ob plugin のサポート終了後は、各コンポーネントを個別に削除する必要があります。

    1. デーモンセットとコンフィグマップをクリーンアップする。
      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
      
    2. オプション:名前空間を削除します。 その名前空間で実行中のリソースが他にない場合。
      kubectl delete namespace ibm-observe
      

プラグインが削除された後、クラスタダッシュボード、Terraform、または手動で、クラスタにロギングエージェントとモニタリングエージェントを再インストールします。

詳しくは、以下のリンクを参照してください。

外部サーバーへのクラスターとアプリのログの転送

IBM Cloud Kubernetes Service の標準クラスターから外部サーバーへのログ転送を構成します。

外部サーバーへのログ転送について

外部サーバに転送するためにクラスタ内のソースに対してロギング構成を作成すると、クラスタ内にコンポーネントが作成されます。 Fluentd コンポーネントがクラスタ内に作成されます。 Fluentd は、そのソースのパスからログを収集し、そのログを外部サーバーに転送します。 ソースからロギング・サービスの取り込みポートへのトラフィックは暗号化されます。

ログ転送を設定できるソースは何ですか?
以下の画像では、ロギングを設定できるソースの領域が表示されています。

クラスタのログ・ソース。
クラスタのログソース

  1. worker: ユーザーがワーカー・ノードに指定したインフラストラクチャー構成に固有の情報。 ワーカー・ログは syslog 、オペレーティング・システム・イベントを含む。 auth.log には、OS に対して行われた認証要求に関する情報が含まれます。

    パス

    • /var/log/syslog
    • /var/log/auth.log
  2. container:実行中のコンテナによって記録される情報 STDOUT または STDERR に書き込まれるもの。

  3. application: アプリケーション・レベルで発生するイベントに関する情報。 これは、ログインに成功したなどのイベントが発生したことの通知、ストレージに関する警告、またはアプリレベルで実行可能なその他の操作である可能性があります ログが転送されるパスを設定できます。 ただし、ロギング構成で絶対パスを使用しないとログが送信されないため、ログを読み取ることができません。 パスがワーカーノードにマウントされている場合、シンボリックリンクが作成されている可能性があります。 例指定されたパスが /usr/local/spark/work/app-0546/0/stderr であるにもかかわらず、ログが実際には /usr/local/spark-1.0-hadoop-1.2/work/app-0546/0/stderr に移動する場合、ログを読み取ることはできません。

  4. 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-***
  5. kubernetes: ワーカー・ノードの kube-system 名前空間内で発生する kubelet、kube-proxy、その他の Kubernetes イベントからの情報。

    パス
    /var/log/kubelet.log
    /var/log/kube-proxy.log
    /var/log/event-exporter/1..log
  6. ingress: Ingress ALB を介してクラスターに伝送されるネットワーク・トラフィックに関する情報。

    パス
    /var/log/alb/ids/*.log
    /var/log/alb/ids/*.err
    /var/log/alb/customerlogs/*.log
    /var/log/alb/customerlogs/*.err
  7. 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 ログの転送元になるソース。 指定可能な値は、containerapplicationworkerkubernetesingress、および storage です。 このオプションは、コンフィギュレーションに適用するログソースをカンマで区切ったリストをサポートする。 ログ・ソースを指定しない場合、 container および ingress のログ・ソースのロギング構成が作成されます。
--type syslog syslog という値を指定することで、ログが外部サーバーに転送されます。
--namespace オプション: ログの転送元になる Kubernetes 名前空間。 ログ転送は、Kubernetes 名前空間 ibm-systemkube-system ではサポートされていません。 この値は、container ログ・ソースについてのみ有効です。 名前空間を指定しないと、クラスター内のすべての名前空間でこの構成が使用されます。
--hostname ログ・コレクター・サービスのホスト名または IP アドレスを指定します。
--port 取り込みポート。 ポートを指定しない場合は、標準ポート 9091 が使用されます。 syslog の場合は、ログ・コレクター・サーバーのポートを指定します。 ポートを指定しない場合は、標準ポート 514 が使用されます。
--app-containers オプション: アプリのログを転送するには、アプリが含まれているコンテナーの名前を指定します。 コンマ区切りのリストを使用して複数のコンテナーを指定できます。 コンテナーを指定しない場合は、指定したパスが入っているすべてのコンテナーのログが転送されます。
--app-paths アプリがログを書き込むコンテナー上のパス。 ソース・タイプが application のログを転送するには、パスを指定する必要があります。 複数のパスを指定するには、/var/log/myApp1/*,/var/log/myApp2/* のようにコンマ区切りリストを使用します。
--syslog-protocol ロギング・タイプが syslog< の場合は、トランスポート層プロトコル。 udptls、または tcp の各プロトコルを使用できます。 udp プロトコルで rsyslog サーバーに転送する場合、 1KB を超えるログは切り捨てられます。
--ca-cert 必須: ロギング・タイプが syslog で、プロトコルが tls である場合、認証局証明書を含む Kubernetes シークレット名。
--verify-mode ロギング・タイプが syslog で、プロトコルが tls である場合、検証モード。 サポートされる値は verify-peer で、デフォルトは verify-none
--skip-validation オプション: 組織名とスペース名が指定されている場合にそれらの検証をスキップします。 検証をスキップすると処理時間は短縮されますが、ロギング構成が無効な場合、ログは正しく転送されません。

udp または tcp プロトコルを介してユーザー自身のサーバーにログを転送する

  1. エディターまたは管理者の IBM Cloud IAM プラットフォーム・アクセス役割があることを確認してください。

  2. ログ・ソースがあるクラスターの場合: アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。

  3. syslog プロトコルを受け付けるサーバーを、2つの方法のいずれかで設定する:

    独自のサーバーをセットアップして管理するか、プロバイダーが管理するサーバーを使用します。 プロバイダーがサーバーを管理する場合は、ロギング・プロバイダーからロギング・エンドポイントを取得します。

    コンテナから syslog を実行する。 たとえば、この デプロイメント.yaml ファイルを使用して、クラスタ内のコンテナを実行する Docker パブリックイメージを取得できます。 このイメージは、パブリック・クラスター IP アドレスのポート 514 を公開し、このパブリック・クラスター IP アドレスを使用して syslog ホストを構成します。

    syslog の接頭辞を取り除くことで、有効なJSONとしてログを見ることができます。 そのためには、 rsyslog サーバーが実行されている etc/rsyslog.conf ファイルの先頭に、以下のコードを追加する: $template customFormat,"%msg%\n"$ActionFileDefaultTemplate customFormat

  4. ログ転送構成を作成します。 パラメーターについて詳しくは、ロギング構成オプションの表についてを参照してください。

    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 プロトコルを介してユーザー自身のサーバーにログを転送する

  1. 以下の IBM Cloud IAM 役割があることを確認します。

    • クラスターに対するエディターまたは管理者のプラットフォーム・アクセス役割
    • ** 名前空間に対するライターまたは**管理者kube-systemのサービス・アクセス役割
  2. ログ・ソースがあるクラスターの場合: アカウントにログインします。 該当する場合は、適切なリソース・グループをターゲットにします。 クラスターのコンテキストを設定します。

  3. syslog プロトコルを受け付けるサーバーを、2つの方法のいずれかで設定する:

    • 独自のサーバーをセットアップして管理するか、プロバイダーが管理するサーバーを使用します。 プロバイダーがサーバーを管理する場合は、ロギング・プロバイダーからロギング・エンドポイントを取得します。

    • コンテナから syslog を実行する。 たとえば、この デプロイメント.yaml ファイルを使用して、クラスタ内のコンテナを実行する Docker パブリックイメージを取得できます。 イメージはパブリック・クラスタIPアドレスでポート 514 を公開し、このパブリック・クラスタIPアドレスを使用して syslog ホストを設定します。 関連する認証局証明書およびサーバー・サイド証明書を注入し、syslog.conf を更新して、サーバー上で tls を有効にする必要があります。

  4. 認証局証明書を ca-cert という名前のファイルに保存します。 この名前のとおりでなければなりません。

  5. kube-system ファイル用のシークレットを ca-cert 名前空間に作成します。 ロギング設定を作成するとき、 --ca-cert オプションにシークレット名を使用する。

    kubectl -n kube-system create secret generic --from-file=ca-cert
    
  6. ログ転送構成を作成します。 パラメーターについて詳しくは、ロギング構成オプションの表についてを参照してください。

    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> フィルターを適用するログのタイプ。 現在、allcontainerhost がサポートされています。
<configs> オプション: ロギング構成 ID のコンマ区切りのリスト。 指定しない場合、フィルターに渡されたすべてのクラスター・ロギング構成にフィルターが適用されます。 フィルターと一致するログ構成を表示するには、--show-matching-configs オプションを使用します。
<kubernetes_namespace> オプション: ログの転送元になる Kubernetes 名前空間。 このオプションは、ログタイプ container を使用している場合にのみ適用されます。
<container_name> オプション: ログをフィルタリングするコンテナーの名前。
<logging_level> オプション: 指定したレベル以下のログをフィルターで除外します。 指定できる値は、規定の順に fatalerrorwarn/warninginfodebugtrace です。 例えば、info レベルのログをフィルタリングした場合、debugtrace もフィルタリングされます。 注釈 このオプションは、ログ・メッセージが JSON 形式で、レベル・フィールドを含む場合にのみ使 用できます。 メッセージをJSONで表示するには、 --output json オプションをコマンドに追加する。
<message> オプション: 正規表現で記述された指定メッセージが含まれるログをフィルターで除外します。
<filter_ID> オプション: ログ・フィルターの ID。
--show-matching-configs オプション: 各フィルターが適用されるロギング構成を表示します。
--all オプション: すべてのログ転送フィルターを削除します。
  1. ロギング・フィルターを作成します。

    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>
    
  2. 作成したログ・フィルターを表示します。

    ibmcloud ks logging filter get --cluster <cluster_name_or_ID> --id <filter_ID> --show-matching-configs
    
  3. 作成したログ・フィルターを更新します。

    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>
    
  4. 作成したログ・フィルターを削除します。

    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