すべてのプロダクト
Search
ドキュメントセンター

Simple Log Service:Kubernetes イベントの収集

最終更新日:Aug 26, 2026

このドキュメントでは、eventer を使用して Kubernetes からイベントを収集し、Simple Log Service (SLS) に送信する方法について説明します。

Kubernetes アーキテクチャはステートマシンに基づいています。状態間の遷移により、対応するイベントが生成されます。正常な状態間の遷移では Normal レベルのイベントが生成され、正常な状態と異常な状態の間の遷移では Warning レベルのイベントが生成されます。

Container Service for Kubernetes (ACK) は、コンテナシナリオ向けにすぐに使えるイベント監視ソリューションを提供します。ACK がメンテナンスする Node Problem Detector (NPD) とそれに含まれる kube-eventer を使用して、コンテナイベントの監視を提供します。

image
  • Node Problem Detector (NPD) は、Kubernetes ノードの診断ツールです。Docker Engine のハング、Linux カーネルのハング、ネットワーク Egress の問題、ファイル記述子の異常などのノードの異常をノードイベントに変換します。kube-eventer と組み合わせることで、NPD はノードイベントアラートのクローズドループシステムを可能にします。

  • kube-eventer は、Kubernetes イベントのオフライン処理のために ACK によってメンテナンスされているオープンソースツールです。クラスターイベントを DingTalk、SLS、EventBridge などの外部システムにプッシュします。また、さまざまなイベントレベルのフィルター条件を提供し、リアルタイム収集、ターゲットを絞ったアラート、非同期アーカイブを可能にします。

  • Node Problem Detector (NPD) は、Kubernetes ノードの診断ツールです。Docker Engine のハング、Linux カーネルのハング、ネットワーク Egress の問題、ファイル記述子の異常などのノードの異常をノードイベントに変換します。kube-eventer と組み合わせることで、NPD はノードイベントアラートのクローズドループシステムを可能にします。

  • kube-eventer は、Kubernetes イベントのオフライン処理のために ACK によってメンテナンスされているオープンソースツールです。クラスターイベントを DingTalk、SLS、EventBridge などの外部システムにプッシュします。また、さまざまなイベントレベルのフィルター条件を提供し、リアルタイム収集、ターゲットを絞ったアラート、非同期アーカイブを可能にします。

前提条件

Alibaba Cloud ACK クラスターや ACK サーバーレスクラスターなどの Kubernetes クラスターが作成されていること。

課金

K8s イベントセンターは、次の条件を満たす場合、無料で利用できます:

  • K8s イベントセンターに関連付けられている Logstore のデータ保持期間が 90 日 (デフォルト値) であること。

  • K8s イベントセンターに書き込まれるデータ量が 1 日あたり 256 MB 未満 (約 250,000 イベント) であること。

例:

  • デフォルトのデータ保持期間である 90 日を使用し、Kubernetes クラスターが 1 日に 1,000 件のイベントを生成する場合、K8s イベントセンターは無料です。

  • データ保持期間を 105 日に設定し、Kubernetes クラスターが 1 日に 1,000 件のイベントを生成する場合、90 日を超えると Logstore のストレージ料金が課金されます。課金項目はログストレージです。ログストレージの課金項目の詳細については、「機能ごとの支払いモードでの課金項目」をご参照ください。

ステップ 1:kube-eventer と node-problem-detector のデプロイ

ACK

ACK クラスターの場合、ack-node-problem-detector コンポーネントは kube-eventer と node-problem-detector の機能を統合しています。このコンポーネントをデプロイするだけで済みます。 ACK サーバーレスクラスターの場合、kube-eventer コンポーネントをデプロイする必要があります。

NPD は、設定とサードパーティのプラグインに基づいてノードの問題や障害を検出し、対応するクラスターイベントを生成します。Kubernetes クラスターは、Pod の退去やイメージのプル失敗など、状態遷移によってさまざまなイベントも生成します。SLS の Kubernetes イベントセンターは、すべての Kubernetes イベントをリアルタイムで集約し、ストレージ、クエリ、分析、可視化、およびアラート機能を提供します。次の手順では、クラスターイベントを SLS の Kubernetes イベントセンターに送信する方法について説明します:

  • クラスターの作成時に [Node-problem-detector (NPD) のインストールとイベントセンターの作成] を選択した場合は、 ステップ 2 に進み、Kubernetes イベントセンターを確認します。

  • クラスターの作成時に [Node-problem-detector のインストールとイベントセンターの作成] を選択しなかった場合は、手動でインストールできます。

    1. ACK コンソールにログインします。左側のナビゲーションペインで、 [クラスター] をクリックします。

    2. [クラスター] ページで、対象クラスターの名前をクリックします。左側のナビゲーションペインで、 [運用管理] > [コンポーネント] を選択します。

    3. [ログとモニタリング] タブで、 [ack-node-problem-detector] を見つけてインストールします。

セルフマネージド Kubernetes

  1. kube-eventer のデプロイ

    1. kubectl をインストールします。詳細については、「クラスターの kubeconfig ファイルを取得し、kubectl を使用してクラスターに接続する」をご参照ください。

    2. 次のテンプレートに基づいて eventer.yaml という名前の設定ファイルを作成します。

      apiVersion: apps/v1
      kind: Deployment
      metadata:
        labels:
          name: kube-eventer
        name: kube-eventer
        namespace: kube-system
      spec:
        replicas: 1
        selector:
          matchLabels:
            app: kube-eventer
        template:
          metadata:
            labels:
              app: kube-eventer
            annotations:
              scheduler.alpha.kubernetes.io/critical-pod: ''
          spec:
            dnsPolicy: ClusterFirstWithHostNet
            serviceAccount: kube-eventer
            containers:
              - image: registry.cn-hangzhou.aliyuncs.com/acs/kube-eventer:v1.2.5-cc7ec54-aliyun
                name: kube-eventer
                command:
                  - "/kube-eventer"
                  - "--source=kubernetes:https://kubernetes.default"
                  ## SLS へ送信
                  ## --sink=sls:https://{endpoint}?project={project}&logStore=k8s-event&regionId={region-id}&internal=false&accessKeyId={accessKeyId}&accessKeySecret={accessKeySecret}
                  - --sink=sls:https://cn-beijing.log.aliyuncs.com?project=k8s-xxxx&logStore=k8s-event&regionId=cn-beijing&internal=false&accessKeyId=xxx&accessKeySecret=xxx
                env:
                  # TZ が割り当てられている場合、TZ 値をタイムゾーンとして設定します
                  - name: TZ
                    value: "Asia/Shanghai"
                volumeMounts:
                  - name: localtime
                    mountPath: /etc/localtime
                    readOnly: true
                  - name: zoneinfo
                    mountPath: /usr/share/zoneinfo
                    readOnly: true
                resources:
                  requests:
                    cpu: 10m
                    memory: 50Mi
                  limits:
                    cpu: 500m
                    memory: 250Mi
            volumes:
              - name: localtime
                hostPath:
                  path: /etc/localtime
              - name: zoneinfo
                hostPath:
                  path: /usr/share/zoneinfo
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRole
      metadata:
        name: kube-eventer
      rules:
        - apiGroups:
            - ""
          resources:
            - events
          verbs:
            - get
            - list
            - watch
      ---
      apiVersion: rbac.authorization.k8s.io/v1
      kind: ClusterRoleBinding
      metadata:
        name: kube-eventer
      roleRef:
        apiGroup: rbac.authorization.k8s.io
        kind: ClusterRole
        name: kube-eventer
      subjects:
        - kind: ServiceAccount
          name: kube-eventer
          namespace: kube-system
      ---
      apiVersion: v1
      kind: ServiceAccount
      metadata:
        name: kube-eventer
        namespace: kube-system

      パラメーター

      タイプ

      必須

      説明

      endpoint

      string

      はい

      SLS のエンドポイント。詳細については、「エンドポイント」をご参照ください。

      project

      string

      はい

      SLS プロジェクト。

      logStore

      string

      はい

      SLS Logstore。

      internal

      string

      セルフマネージド Kubernetes クラスターに必須です。

      セルフマネージド Kubernetes クラスターの場合、このパラメーターを false に設定する必要があります。

      regionId

      string

      セルフマネージド Kubernetes クラスターに必須です。

      SLS が存在するリージョンの ID。詳細については、「エンドポイント」をご参照ください。

      accessKeyId

      string

      セルフマネージド Kubernetes クラスターに必須です。

      AccessKey ID。Resource Access Management (RAM) ユーザーの AccessKey ペアを使用することを推奨します。詳細については、「AccessKey ペア」をご参照ください。

      accessKeySecret

      string

      セルフマネージド Kubernetes クラスターに必須です。

      AccessKey シークレット。RAM ユーザーの AccessKey ペアを使用することを推奨します。詳細については、「AccessKey ペア」をご参照ください。

    3. 次のコマンドを実行して、eventer.yaml 設定をクラスターに適用します。

      kubectl apply -f eventer.yaml

      期待される出力:

      deployment.apps/kube-eventer created
      clusterrole.rbac.authorization.k8s.io/kube-eventer created
      clusterrolebinding.rbac.authorization.k8s.io/kube-eventer created
      serviceaccount/kube-eventer created
  2. node-problem-detector をデプロイします。

ステップ 2:K8s イベントセンターインスタンスの作成

説明

K8s イベントセンターインスタンスを作成すると、SLS は宛先プロジェクトに k8s-event という名前の Logstore と関連ダッシュボードを自動的に作成します。

  1. Simple Log Service コンソールにログインします。

  2. ログアプリケーション セクションで、インテリジェント O&M タブをクリックし、K8s イベントセンター をクリックします。

  3. イベントセンター管理 ページで、右上隅の 追加 をクリックします。

  4. イベントセンターの追加 パネルで、パラメーターを設定し、次へ をクリックします。

    • 既存のプロジェクト を選択した場合は、[プロジェクト] ドロップダウンリストから既存のプロジェクトを選択し、K8s イベントセンターインスタンスのリソース (Logstore やダッシュボードなど) を管理します。

    • Kubernetes クラスター を選択した場合は、K8s Cluster ドロップダウンリストから既存の K8s クラスターを選択します。この方法を使用すると、SLS は k8s-log-{cluster-id} という名前のプロジェクトを自動的に作成し、K8s イベントセンターインスタンスのリソース (Logstore やダッシュボードなど) を管理します。

ステップ 3:K8s イベントセンターインスタンスの使用

K8s イベントセンターインスタンスを作成し、kube-eventernode-problem-detector をデプロイした後、イベントセンターの使用を開始できます。イベントの概要の表示、イベント詳細のクエリ、Pod ライフサイクルの表示、ノードイベントの表示、コアコンポーネントイベントの表示、アラートの設定、カスタムクエリの実行、バージョンの更新が可能です。

K8s イベントセンター ページで、対象の K8s イベントセンターインスタンスを見つけ、[k8s事件中心-002] アイコンをクリックして次の操作を実行します。

操作

説明

イベント概要の表示

イベント概要 ページには、コアイベントの要約統計が表示されます。統計には、イベントの総数、今日と昨日のエラーイベントの比較、アラート統計、エラーイベントの傾向、Pod の OOM 詳細などが含まれます。

説明

Pod の OOM 情報は特定の Pod を識別しません。イベントが発生したノード、プロセス名、およびプロセス ID のみを特定できます。Pod の OOM の発生時刻の前後で発生する Pod の再起動イベントを見つけるためにカスタムクエリを実行すると、特定の Pod の特定に役立ちます。

イベント詳細のクエリ

イベント詳細 ページには、イベントタイプ、イベントオブジェクト、ホスト、名前空間、名前など、さまざまなディメンションでフィルタリングされたイベントの詳細が表示されます。

Pod ライフサイクルの表示

ポッドライフサイクル ページには、Pod のライフサイクルにおけるイベントのグラフィカルなタイムラインが表示されます。イベントレベルで重要な Pod イベントをフィルタリングすることもできます。

ノードイベントの表示

ノードイベント ページには、ノードのライフサイクルやイベントリストなど、ノードイベントの詳細が表示されます。

コアコンポーネントイベントの表示

コアコンポーネントイベント ページには、ECS の再起動失敗や未実装の URL モードなど、コアコンポーネントイベントの詳細が表示されます。

アラートの設定

アラートの設定 ページで、K8s イベントセンターのアラートを設定できます。詳細については、「アラートの設定」をご参照ください。

カスタムクエリの実行

カスタムクエリ ページで、クエリ文と分析文をカスタマイズできます。

K8s イベントセンターのすべてのイベントは Logstore に保存されるため、カスタムクエリ、イベント消費、カスタムレポート、カスタムアラートなど、Logstore のすべての機能を使用できます。詳細については、「クエリと分析のクイックスタート」をご参照ください。

K8s イベントセンターインスタンスに関連付けられているプロジェクトにアクセスするには、次のいずれかの方法でプロジェクト名を見つけることができます:

  • カスタムクエリ ページの URL でプロジェクト名を見つけることができます。URL の形式は https://sls.console.alibabacloud.com/lognext/app/k8s-event/project/k8s-log-xxxx/logsearch/k8s-event です。 project/ の後のフィールドがプロジェクト名です (例:k8s-log-xxxx)。

  • イベントセンター管理 タブで、インスタンスリストから対象の K8s イベントセンターインスタンスを見つけ、対応するプロジェクト名を確認します。

バージョンの更新

バージョンの更新 ページで、K8s イベントセンターをアップグレードできます。

ログサンプル

次にログのサンプルを示します。

hostname:  cn-hangzhou.i-***********"
level:  Normal
pod_id:  2a360760-****
pod_name:  logtail-ds-blkkr
event_id:  {  
   "metadata":{  
      "name":"logtail-ds-blkkr.157b7cc90de7e192",
      "namespace":"kube-system",
      "selfLink":"/api/v1/namespaces/kube-system/events/logtail-ds-blkkr.157b7cc90de7e192",
      "uid":"2aaf75ab-****",
      "resourceVersion":"6129169",
      "creationTimestamp":"2019-01-20T07:08:19Z"
   },
   "involvedObject":{  
      "kind":"Pod",
      "namespace":"kube-system",
      "name":"logtail-ds-blkkr",
      "uid":"2a360760-****",
      "apiVersion":"v1",
      "resourceVersion":"6129161",
      "fieldPath":"spec.containers{logtail}"
   },
   "reason":"Started",
   "message":"Started container",
   "source":{  
      "component":"kubelet",
      "host":"cn-hangzhou.i-***********"
   },
   "firstTimestamp":"2019-01-20T07:08:19Z",
   "lastTimestamp":"2019-01-20T07:08:19Z",
   "count":1,
   "type":"Normal",
   "eventTime":null,
   "reportingComponent":"",
   "reportingInstance":""
}

ログフィールド

タイプ

説明

hostname

string

イベントが発生したホストのホスト名。

level

string

ログレベル。有効値:Normal および Warning。

pod_id

string

Pod の一意の ID。このフィールドは、イベントが Pod に関連する場合にのみ含まれます。

pod_name

string

Pod の名前。このフィールドは、イベントが Pod に関連する場合にのみ含まれます。

event_id

json

イベントの詳細。このフィールドの値は JSON 文字列です。

よくある質問

K8s イベントセンターインスタンスにデータがない

K8s イベントセンターインスタンスをデプロイすると、新しいイベントが自動的に収集されます。カスタムクエリ ページで検索できます。右上隅の時間範囲を 1 日に設定することを推奨します。データが見つからない場合、通常は次の 2 つの原因が考えられます:

  • K8s イベントセンターをデプロイしてから、Kubernetes クラスターで新しいイベントが生成されていない。

    kubectl get events --all-namespaces コマンドを実行して、クラスターで新しいイベントが生成されているかどうかを確認できます。

  • kube-eventer および node-problem-detector のデプロイで、パラメーターが正しく設定されていません。

    • ACK クラスターを使用している場合は、次の手順を実行します:

      1. ACK コンソールにログインします。

      2. クラスターリスト ページで、対象クラスターの名前をクリックします。

      3. 左側のナビゲーションペインで、適用 > Helm を選択します。

      4. [Helm] ページで、[ack-node-problem-detector] を見つけて 更新 をクリックします。

      5. パラメーター設定を確認および変更します。

    • セルフマネージド Kubernetes クラスターを使用している場合は、「Kubernetes イベントの収集」でパラメーター設定をご参照ください。

イベントのコンテナログを表示する方法

  • ACK クラスターを使用している場合は、次の手順を実行します:

    1. ACK コンソールにログインします。

    2. クラスターリスト ページで、対象クラスターの名前をクリックします。

    3. 左側のナビゲーションペインで、ワークロード > ポッド を選択します。

    4. 名前空間[kube-system] に設定します。

    5. ポッド リストで、対象の Pod を見つけて Log をクリックします。

  • セルフマネージド Kubernetes クラスターを使用している場合は、[kube-system] 名前空間内の kube-eventer というプレフィックスを持つ Pod のログを確認します。