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

Simple Log Service:イベントセンターの作成と使用

最終更新日:Sep 04, 2024

イベントはKubernetesクラスターのステータス変更を記録します。 たとえば、ポッドを作成、実行、または削除したとき、またはコンポーネントの例外が発生したときに、イベントでステータスの変更を記録できます。 K8s Event Centerは、Kubernetesクラスター内のすべてのイベントをリアルタイムで収集します。 これにより、イベントに対してさまざまな操作を実行できます。 たとえば、イベントデータを保存、クエリ、分析、視覚化したり、イベントのアラートを設定したりできます。 このトピックでは、K8sイベントセンターでイベントセンターを作成して使用する方法について説明します。

Kubernetesはステートマシンに基づいて設計されています。 イベントは、異なる状態間の遷移によって生成される。 通常、正常イベントは、状態マシンが予想される状態に変化するときに生成され、警告イベントは、状態マシンが予想されない状態に変化するときに生成される。

ACKは、コンテナ化シナリオを対象とする既成のイベント監視ソリューションを提供します。 ACKは、NPDによって提供されるNPDおよびkube − eventerを使用してコンテナイベントを監視する。

image
  • NPDは、Kubernetesノードを診断するためのツールです。 NPDはノード例外を検出し、ノードイベントを生成し、kube-eventerと連携してこれらのイベントにアラートを発生させ、アラートの閉ループ管理を有効にします。 NPDは、Dockerエンジンのハング、Linuxカーネルのハング、アウトバウンドトラフィックの例外、およびファイル記述子の例外が検出されると、ノードイベントを生成します。 詳細は、「NPD」をご参照ください。

  • kube-eventerは、ACKによって維持されるオープンソースのイベントエミッタです。 kube-eventerは、KubernetesイベントをDingTalk、Simple Log Service、EventBridgeなどのシンクに送信します。 kube-eventerは、さまざまなレベルのイベントをフィルタリングするフィルタ条件も提供します。 kube-eventerを使用して、イベントをリアルタイムで収集したり、特定のイベントでアラートをトリガーしたり、イベントを非同期にアーカイブしたりできます。 詳細については、『kube-eventer』をご参照ください。

  • NPDは、Kubernetesノードを診断するためのツールです。 NPDはノード例外を検出し、ノードイベントを生成し、kube-eventerと連携してこれらのイベントにアラートを発生させ、アラートの閉ループ管理を有効にします。 NPDは、Dockerエンジンのハング、Linuxカーネルのハング、アウトバウンドトラフィックの例外、およびファイル記述子の例外が検出されると、ノードイベントを生成します。 詳細は、「NPD」をご参照ください。

  • kube-eventerは、ACKによって維持されるオープンソースのイベントエミッタです。 kube-eventerは、KubernetesイベントをDingTalk、Simple Log Service、EventBridgeなどのシンクに送信します。 kube-eventerは、さまざまなレベルのイベントをフィルタリングするフィルタ条件も提供します。 kube-eventerを使用して、イベントをリアルタイムで収集したり、特定のイベントでアラートをトリガーしたり、イベントを非同期にアーカイブしたりできます。 詳細については、『kube-eventer』をご参照ください。

前提条件

Container Service for Kubernetes (ACK) クラスターやACKサーバーレスクラスターなどのKubernetesクラスターが作成されます。

課金

次の条件が満たされている場合、イベントセンターを使用しても課金されません。

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

  • イベントセンターに書き込まれる1日あたりのデータ量は256 MB未満で、これは約250,000イベントに相当します。

例:

  • 関連付けられたLogstoreにデフォルトのデータ保持期間が指定されており、1,000イベントがKubernetesクラスターで1日あたりに生成される場合、イベントセンターを無料で使用できます。

  • データ保持期間を105日に変更した場合、Kubernetesクラスターで1日あたり1,000イベントが生成された場合、90日間データが保存された後、関連付けられたLogstoreに保存されたデータに対して課金されます。 料金は、ログデータが占有するストレージスペースの請求可能項目に基づいて計算されます。. 請求可能なアイテムの詳細については、「ペイバイフィーチャーの請求可能なアイテム」をご参照ください。

ステップ1: kube-eventerおよびnode-problem-detectorコンポーネントのデプロイ

ACKクラスター

ACKクラスターを使用する場合、コンポーネントはkube-eventerおよびnode-problem-detectorコンポーネントの機能と統合されているため、ack-node-problem-detectorコンポーネントのみをデプロイする必要があります。 詳細については、「イベントモニタリング」をご参照ください。 ACKサーバーレスクラスターを使用する場合は、kube-eventerコンポーネントをデプロイする必要があります。

NPDは、サードパーティのプラグインと連携して、ノード例外を検出し、クラスターイベントを生成します。 Kubernetesクラスターは、クラスターのステータスが変更されたときにもイベントを生成します。 たとえば、ポッドが追い出されたり、イメージプル操作が失敗したりすると、関連するイベントが生成されます。 Simple Log ServiceのKubernetesイベントセンターは、クラスターイベントを収集、保存、および視覚化します。 これらのイベントをクエリおよび分析し、アラートを設定できます。 以下の方法を使用して、クラスターイベントをSimple Log ServiceのKubernetesイベントセンターにシンクできます。

  • クラスターの作成時に [node-problem-detectorのインストールとイベントセンターの作成] を選択している場合は、手順2に進み、Kubernetesイベントセンターを表示します。 クラスターの作成時にack-node-problem-detectorコンポーネントをインストールする方法の詳細については、「ACK管理クラスターの作成」をご参照ください。

  • クラスターの作成時に [ノード問題検出器のインストールとイベントセンターの作成] を選択しなかった場合は、次の手順を実行して手動でインストールします。

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

    2. [クラスター] ページで、管理するクラスターの名前をクリックします。 左側のナビゲーションウィンドウで、[操作] > [アドオン] を選択します。

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

その他のKubernetesクラスター

  1. kube-eventerコンポーネントをデプロイします。

    1. kubectlツールをインストールします。 詳細については、「kubectlを使用したACKクラスターへの接続」をご参照ください。

    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"
                  ## .send to 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:
                  # If TZ is assigned, set the TZ value as the time zone
                  - 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

      課金されます

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

      project

      String

      課金されます

      Simple Log Serviceプロジェクト。

      logStore

      String

      課金されます

      Simple Log Service Logstore。

      内部

      String

      自己管理型Kubernetesクラスターの場合ははい

      自己管理型Kubernetesクラスターを使用する場合は、値をfalseに設定します。

      regionId

      String

      自己管理型Kubernetesクラスターの場合ははい

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

      accessKeyId

      String

      自己管理型Kubernetesクラスターの場合ははい

      AccessKey ID。 Resource Access Management (RAM) ユーザーのAccessKey IDを使用することを推奨します。 詳細は、「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コンポーネントをデプロイします。

    詳細については、『GitHub』をご参照ください。

ステップ2: イベントセンターを作成する

説明

イベントセンターを作成すると、Simple Log Serviceは指定されたプロジェクトにk8s-eventという名前のLogstoreを自動的に作成します。 関連するダッシュボードもイベントセンター用に作成されます。

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

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

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

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

    • [既存のプロジェクトの選択] を選択した場合、[プロジェクト] ドロップダウンリストから既存のプロジェクトを選択して、イベントセンターのリソースを管理できます。 リソースには、Logstoreと関連するダッシュボードが含まれます。

    • [Container Service for KubernetesからKubernetesクラスターを選択] を選択した場合、[K8sクラスター] ドロップダウンリストから既存のKubernetesクラスターを選択できます。 この方法を使用してイベントセンターを作成すると、Simple Log Serviceは、イベントセンターのリソースを管理するために、名前がk8s-log-{cluster-id} 形式のプロジェクトを自動的に作成します。 リソースには、Logstoreと関連するダッシュボードが含まれます。

ステップ3: イベントセンターを使用する

K8s event centerでイベントセンターを作成し、kube-eventerコンポーネントとnode-problem-detectorコンポーネントをデプロイしたら、イベントセンターを使用できます。 たとえば、イベントセンターを使用して、イベント統計の表示、イベントの詳細の照会、ポッドのライフサイクルの表示、ノードイベントの表示、コアコンポーネントイベントの表示、アラートの設定、カスタムクエリ操作の実行、K8sイベントセンターのバージョンの更新を行うことができます。

[K8sイベントセンター] ページの左側のナビゲーションウィンドウで、管理するイベントセンターを見つけ、k8s事件中心-002アイコンをクリックします。 次に、次の操作を実行できます。

image

API 操作

説明

イベント統計の表示

[イベントの概要] タブには、コアイベントの統計が表示されます。 統計には、イベントの総数、当日と前日のエラーイベントの数の差、アラートの統計、エラーイベントの傾向、ポッドOOMイベントの詳細が含まれます。

説明

ポッドOOMイベントが記録されている場合、イベントが発生したノード、プロセス名、およびプロセスIDのみを表示できます。 イベントが発生したポッドを特定できません。 ただし、ポッドOOMイベントの前後に発生するポッド再起動イベントを照会できます。 このようにして、ポッドを識別できます。

イベントの詳細の照会

[イベントの詳細] タブには、イベントの種類、イベントの宛先、ホスト、名前空間、名前など、さまざまなフィルター条件を使用して返されるイベントの詳細が表示されます。

ポッドのライフサイクルを表示する

ポッドのライフサイクルタブには、ポッドのライフサイクル内で発生するイベントの詳細が表示されます。 イベントレベルで重要なポッドイベントをフィルタリングできます。

ノードイベントの表示

[ノードイベント] タブには、ノードイベントの詳細が表示されます。 ノードのライフサイクルと、ノードで発生するイベントを表示できます。

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

[イベントコア] タブには、コアコンポーネントのイベントの詳細が表示されます。 イベントには、NLC.Task.RestartECS.FailとNLC.Task.URL.Mode.Unimplementedが含まれます。

アラートの設定

[アラート設定] をクリックした後に表示されるページで、イベントセンターのアラートを設定できます。 詳細については、「アラートの設定」をご参照ください。

カスタムクエリ操作の実行

[カスタムクエリ] をクリックした後に表示されるページで、カスタムクエリ文を実行できます。

イベントセンター内のすべてのイベントはLogstoreに保存されます。 Logstoreのすべての機能を使用できます。 たとえば、カスタムクエリ文を実行したり、イベントデータを消費したり、カスタムレポートを作成したり、カスタムアラートを設定したりできます。 詳細については、「ログの照会と分析」をご参照ください。

イベントセンターに指定されたプロジェクトにアクセスする場合は、次のいずれかの方法でプロジェクトの名前を取得できます。

  • [カスタムクエリ] をクリックした後に表示されるページのURLからプロジェクトの名前を取得します。 URLは https://sls.console.aliyun.com/lognext/app/k8s-event/project/k8s-log-xxxx/logsearch/k8s-event 形式です。 プロジェクトフィールドに続くフィールドは、プロジェクトの名前を示します。 例: k8s-log-xxxx。

  • [イベントセンターの管理] ページのイベントセンターのリストで、イベントセンターを見つけてプロジェクト名を表示します。

K8sイベントセンターのバージョンを更新する

[バージョン更新] をクリックした後に表示されるページで、K8sイベントセンターのバージョンを更新できます。

イベントセンターの削除

[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 の一意の識別子。 このフィールドは、イベントタイプがポッドに関連している場合にのみ使用できます。

pod_name

String

ポッドの名前。 このフィールドは、イベントタイプがポッドに関連している場合にのみ使用できます。

event_id

JSON

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

よくある質問

イベントセンターにデータが存在しないのはなぜですか?

イベントセンターをデプロイすると、新しいイベントがイベントセンターに自動的に収集されます。 [カスタムクエリ] をクリックすると、イベントを検索できます。 右上隅の時間範囲を1日に設定することをお勧めします。 次の理由により、イベントセンターでデータが見つからない場合があります。

  • イベントセンターをデプロイした後、関連付けられたKubernetesクラスターにはイベントは生成されません。

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

  • kube-eventerおよびnode-problem-detectorコンポーネントのデプロイに使用されるパラメーターには、無効な値が指定されています。

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

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

      2. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックします。

      3. 左側のナビゲーションウィンドウで、[アプリケーション] > [ヘルム] を選択します。

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

      5. パラメータ設定を確認して変更します。 詳細については、「手順1: kube-eventerおよびnode-problem-detectorコンポーネントのデプロイ」をご参照ください。

    • セルフマネージドKubernetesクラスターを使用する場合は、「Kubernetesイベントの収集」の手順に従ってください。

イベントが発生したコンテナのログを表示するにはどうすればよいですか?

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

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

    2. [クラスター] ページで、管理するクラスターを見つけ、クラスターの名前をクリックします。

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

    4. 名前空間パラメーターをkube-systemに設定します。

    5. [ポッド] ページで、管理するポッドを見つけ、[操作] 列の [ログ] をクリックします。

  • 自己管理型Kubernetesクラスターを使用している場合は、kube-system名前空間と、名前がeventer-slsの接頭辞を付けられたファイルを見つけて、ポッドログを表示します。