Checkmk
to checkmk.com
Important

This is a machine translation based on the English version of the article. It might or might not have already been subject to text preparation. If you find errors, please file a GitHub issue that states the paragraph that has to be improved.

1. 序文

Kubernetes の監視の設定およびそのさまざまな種類については、別の記事「Kubernetes の監視」で説明しています。 ただし、OpenShift は一般的に、特にその設定作業が若干異なるため、OpenShift の監視の設定、およびそこで実行されている Kubernetes クラスタの設定について、別の記事で説明することにしました。 この記事では、読みやすさと簡潔さを考慮して、これらのクラスタを OpenShift クラスタと表記します。 OpenShift クラスタの監視は、Checkmk の商業版のいずれかを使用してのみ可能です。

2. はじめに

Checkmk は、OpenShift クラスタの監視に役立ちます。2.3.0 以降、当社の商業版を使用して、以下のオブジェクトを監視することができます。

  • クラスタ

  • デプロイ

  • ノード

  • ポッド

  • デーモンセット

  • ステートフルセット

  • クーロンジョブ

Kubernetes の監視に使用できるすべてのチェックプラグインの完全なリストについては、チェックプラグインのカタログをご覧ください。

2.1. 監視環境のセットアップ

OpenShift クラスタは、個々のコンポーネントの数や配置が短時間で大きく変化する場合があるため、OpenShift 環境の監視には別の Checkmk サイトを作成することをお勧めします。 このサイトは、分散監視の手順に従って、通常どおりセントラルサイトに接続することができます。

2.2. Checkmk での OpenShift の監視プロセス

Checkmk は、2 つの方法で OpenShift クラスタを監視します。

  • Checkmk は、Kubernetes API 経由でクラスタから直接基本情報を取得します。 これを使用して、ノードおよびコンテナの状態を取得することができます。ポッドおよびデプロイメントのメタデータのほとんども、この方法で取得されます。 しかし、包括的な監視を行うには、この時点ではまだ何かが欠けています。 たとえば、特定のデプロイが CPU にどれだけの負荷をかけているか、デーモンセットが現在どれだけのメモリを消費しているかといった質問には、この方法では答えられません。

  • Prometheus は OpenShift クラスタにデフォルトでインストールされているため、Checkmk は OpenShift 環境内のこの Prometheus インスタンスを正確に照会し、その結果を通常の Checkmk の方法で準備することができます。 OpenShift 環境を完全に包括的に監視するには、この接続を設定することを強くお勧めします。 さらに、Kubernetes ダッシュボードを使用することは、適切なワークロードデータが利用可能な場合にのみ有用です。

3. クラスタに必要な前提条件を作成する

Checkmk で OpenShift 環境を監視するには、まずクラスタに必要な前提条件を作成する必要があります。

3.1. 名前空間とサービスアカウントの作成

まず、OpenShift クラスタで Checkmk 用の名前空間とサービスアカウントを設定する必要があります。 最も簡単な方法は、OpenShift CLI (略称oc ) を使用することです。

以下の例では、この名前空間に「checkmk-monitoring 」という名前を付けます。 別の名前を選択したい場合や選択する必要がある場合は、サービスアカウントの作成時にもこの変更を行う必要があります。

user@host:~$ oc create namespace checkmk-monitoring
namespace/checkmk-monitoring created

関連付けられたロールと、いわゆる RoleBinding を持つサービスアカウントは、GitHub で公開されている既製のYAML ファイルを使用して作成できます。 その内容を確認し、次のコマンドを実行してください。

user@host:~$ oc apply -f https://raw.githubusercontent.com/Checkmk/checkmk_kube_agent/checkmk_docs/deploy/kubernetes/checkmk-serviceaccount.yaml
serviceaccount/checkmk created
clusterrole.rbac.authorization.k8s.io/checkmk-metrics-reader created
clusterrolebinding.rbac.authorization.k8s.io/checkmk-metrics-reader-binding created

または、この YAML ファイルをダウンロードし、必要に応じてカスタマイズしてから、oc apply -f をこのローカルコピーのファイルに適用することもできます。

3.2. API エンドポイント、トークン、および証明書の取得

oc コマンドラインツールを使用すると、通常、スペシャルエージェントの設定で指定する必要のある、クラスタのすべての情報を読み出すこともできます。 サービスアカウント名または名前空間を変更した場合は、以下のコマンドの説明に従って、この情報を編集する必要があります。

Kubernetes API エンドポイントの取得

Kubernetes API エンドポイントは、oc で次のコマンドを使用して表示されます。

user@host:~$ oc cluster-info
Kubernetes control plane is running at https://api.myopenshift.example.com:6443

このアドレスは、指定したポートを含めて、後でKubernetes ルールAPI server connection > Endpoint フィールドに含める必要があります。

Prometheus API エンドポイントの取得

クラスタ内の Prometheus インスタンスの API エンドポイントからアドレスを取得するには、OpenShift の GUI を使用すると簡単です。 管理者ロールでは、Networking > Routes で、多少長いリストを見つけることができます。 ここでは、おそらく名前に「Prometheus」という単語を含むルートも見つかるはずです。 これも、OpenShift クラスタの構成によって異なります。 Location の下に、後でPrometheus API endpoint フィールドで必要になる URL が表示されます。

次のコマンドを使用して、コマンドラインで FQDN を取得できる場合もあります。

user@host:~$ oc get routes --all-namespaces | grep prometheus
openshift-monitoring    prometheus-k8s   prometheus-k8s-openshift-monitoring.apps.myopenshift.example.com   prometheus-k8s  web  reencrypt/Redirect   None

その後、Kubernetes ルール内の「Prometheus API endpoint 」フィールドに、prometheus-k8s-openshift-monitoring.apps.myopenshift.example.com 文字列の前にプロトコルをプレフィックスとして追加するだけで済みます。

トークンを取得する

次のコマンドを使用して、トークンを読み出すことができます。このトークンは、通常、後で Checkmk のスペシャルエージェントに指定する必要があります。

user@host:~$ oc get secret $(oc describe sa checkmk -n checkmk-monitoring | grep 'Tokens' | awk '{ print $2 }') -n checkmk-monitoring -o=jsonpath='{.data.token}' | base64 --decode
eyJhbGciOiJSUzI1NiIsImtpZCI6IkxFbDdZb25t...

この情報をシェルに表示したままにするか、Checkmk での次のセットアップでアクセスできる場所にトークンをコピーしてください。

証明書の取得

次のコマンドを使用して、後で Checkmk の「Global settings 」で指定する必要のある証明書を取得できます。

user@host:~$ oc get secret $(oc describe sa checkmk -n checkmk-monitoring | grep 'Tokens' | awk '{ print $2 }') -n checkmk-monitoring -o=jsonpath='{.data.ca\.crt}' | base64 --decode

この情報をシェルに表示したままにするか、BEGIN CERTIFICATE およびEND CERTIFICATE 行を含む証明書を、Checkmk での次のセットアップ中にアクセスできる場所にコピーしてください。

ここで出力が空の場合は、前の「トークンを取得する」セクションと同じヒントが適用されます。

4. Checkmk での監視の設定

次に、Checkmk GUI で、スペシャルエージェントと、Kubernetes オブジェクトのホストを自動的に作成するルールの設定に進みます。 ただし、スペシャルエージェントを設定するには、まずいくつかの前提条件を満たす必要があります。

4.1. Checkmk にパスワード(トークン)を保存する

サービスアカウントのパスワード(トークン)は、Checkmk パスワードストアに保存することをお勧めします。 これにより、パスワードの保存と使用を整理して分離できるため、最も安全な方法です。 あるいは、ルールを作成する際にパスワードをプレーンテキストで直接入力することもできます(以下を参照)。

パスワードを Checkmk パスワードストアに追加するには、Setup > General > Passwords > Add password に移動します。 この例では、ID およびタイトルとして「My OpenShift Token 」を使用しています。

kubernetes password

4.2. サービスアカウントの CA 証明書を Checkmk にインポートする

Checkmkがサービスアカウントの証明書チェーンを信頼するには、その証明書を Checkmk に保存する必要があります。BEGIN CERTIFICATE およびEND CERTIFICATEを含むすべての行をここにコピーし、[Setup > General > Global settings > Site management > Trusted certificate authorities for SSL] の [セットアップ] メニューで証明書を追加します。

kubernetes ca

4.3. ピギーバックホストの作成

通常どおり Checkmk で新しいホストを作成し、たとえば「myopenshiftclusterhost 」という名前を付けます。 タイトルとホスト名からもわかるように、このホストはピギーバックデータの収集、およびクラスタレベルでのすべてのサービスとメトリックのマッピングに使用されます。 このホストは特別なエージェントを通じてのみデータを受信するため、ホストのプロパティで「IP address family 」オプションを「No IP 」に設定してください。 「Save & view folder 」ボタンを押して、この設定全体を確認してください。

Example setup for a cluster host with the important 'No IP' setting.

4.4. ダイナミックホストマネージメントの設定

異なる Kubernetes クラスタ内のオブジェクトを確実に分離するために、通常、Setup > Hosts > Add folder を使用してクラスタごとにフォルダを作成し、そのフォルダにダイナミックホストマネージメントがクラスタのすべてのホストを自動的に作成できるようにします。 ただし、このようなフォルダを作成して使用することは任意です。

次に、着信ピギーバックデータの接続を設定します。 これを行うには、Setup > Hosts > Dynamic host management > Add connection.に移動します。 まずタイトルを入力し、[Connection Properties ] で [show more] をクリックします。

次の非常に重要な手順は、Restrict source hosts に、先ほど作成したピギーバックホストを入力することです。

次に、Piggyback creation options で「Add new element 」をクリックし、「Create hosts in 」で、先ほど作成したフォルダを選択します。

Host attributes to set のデフォルトの属性はそのままにしておいてください。 これにより、Checkmk は、自動的に作成されたホストからのピギーバックデータのみを受け入れ、これらのホストに ping を実行したり、SNMP 経由でアクセスしたりすることを試みません。

監視可能オブジェクトおよび監視対象オブジェクトが絶えず増減する OpenShift 環境では、通常、Automatically delete hosts without piggyback data オプションも有効にすることをお勧めします。 このオプションの具体的な機能、およびホストが実際に削除される状況については、ダイナミックホストマネージメントに関する記事の「ホストの自動削除」の章で説明しています。

最後に、Discover services during creation オプションを有効にしてください。

この新しい接続の「Connection Properties 」セクションは、次のように表示されます。

Example settings for a dynamic host management.

4.5. 定期的なサービスディスカバリーのカスタマイズ

デフォルトでは、Checkmk は 2 時間ごとにサービスディスカバリーを実行し、その結果をCheck_MK Discovery サービスに表示します。 この設定は、Periodic service discovery ルールセットにあります。 OpenShift のコンテキストでは、すべてのホストに対して、ラベルcmk/kubernetes:yes のルールを作成することをお勧めします。 これは、Kubernetes オブジェクトを表すすべてのホストが、Checkmk からこのラベルを自動的に受け取るためです。 この場合、サービスディスカバリーのインターバルは 2 時間よりも短い間隔を選択し、Automatically update service configuration オプションも有効にしてください。 以下のスクリーンショットの設定はあくまで例です。 クラスタごとに、適切な設定をケースバイケースで決定してください。

An example setup for the periodic service discovery for Kubernetes objects.

このルールをクラスタ内のすべてのホストに制限するには、[Host labels ] で、[Conditions] に「cmk/kubernetes:yes 」と入力してください。 ただし、クラスタごとに異なるルールを作成したい場合は、ここでそれぞれのクラスタ固有のラベルを使用してください。 これらのラベルは、常に「cmk/kubernetes/cluster:mycluster 」というフォームになります。

Example a restriction to hosts using a cluster-specific label.

4.6. スペシャルエージェントの設定

クラスタと Checkmk で必要な準備がすべて完了しましたので、スペシャルエージェントの設定に移ります。 これは、Setup > Agents > VM, cloud, container > Kubernetes から確認できます。Add rule で新しいルールを作成します。

まず、監視するクラスタの名前を割り当てる必要があります。 この名前は、必要に応じて自由に指定できます。 この名前は、この特定のクラスタに由来するすべてのオブジェクトに一意の名前を割り当てるために使用されます。 たとえば、ここに「mycluster 」と入力すると、このクラスタ内のすべてのポッドのホスト名は、後で「pod_mycluster 」で始まるようになります。 ホスト名の次の部分は、この Kubernetes オブジェクトが存在する名前空間になります。 たとえば、ポッドのホスト名は「pod_mycluster_kube-system_svclb-traefik-8bgw7 」になります。

Token で、Checkmk パスワードストアから先ほど作成したエントリを選択します

Sample cluster name and token selection.

API server connection > Endpoint で、Checkmk は、Kubernetes API サーバーに接続するための URL の入力要求を表示します。 ポートは、サービスが仮想ホスト経由で提供されていない場合にのみ必要です。 ここでは、Kubernetes API エンドポイントの取得セクションで決定したアドレスを入力してください。

これまでの手順に従って、クラスタの CA 証明書を Checkmkに保存した場合は、[SSL certificate verification ] で [Verify the certificate] を選択します。

Example for specifying the API server connection.

Enrich with usage data オプションを有効にし、次のメニューでUse data from OpenShift を選択し、Prometheus API エンドポイントの取得セクションで決定したPrometheus API endpoint を入力します。

Example of specifying the cluster collector connection.

Collect information about…​ の下のリストで、クラスタ内で監視するオブジェクトを選択できます。 このリストには、最も関連性の高いオブジェクトが含まれています。Pods of CronJobs も監視する場合は、このオプションのインラインヘルプを参照してください。

Example list of a selection of Kubernetes objects that are to be monitored.

次の 2 つの選択項目では、監視するオブジェクトをさらに絞り込むことができます。 特定の名前空間のオブジェクトのみに関心がある場合は、[Monitor namespaces] で適宜設定してください。 ここでは、監視する個々の名前空間を入力するか、監視から個々の名前空間を明示的に除外することができます。

Cluster resource aggregation オプションを使用すると、クラスタのワークロードにリソースを提供しないノードを指定できます。 これらのノードは、使用可能なリソースの計算から除外する必要があります。 そうしないと、容量のボトルネックが検出されないおそれがあります。 そのため、control-plane およびinfra ノードは、デフォルトで計算から除外されています。

Example configuration for namespaces and resource aggregation.

最後のオプションとして、Kubernetes からいわゆるアノテーションをインポートすることができます。 Checkmk では、これらのアノテーションはホストラベルとなり、ルールで条件としてさらに使用することができます。 インポートするアノテーションを指定するには、正規表現を使用してください。 この時点で、詳細なインラインヘルプを再度参照してください。

注: Import all valid annotations オプションは、完全性を期すためにのみここに記載されています。 すべての注釈を一度にインポートすることは、Checkmk に膨大な量の不要なラベルが作成される可能性があるため、お勧めできません。

重要: Conditions > Explicit hosts で、先ほど作成したホスト を入力してください

Rules for special agents must always be explicitly set to specific hosts, as seen here.

次に、ルールを保存し、このホストのサービスディスカバリーを実行します。 最初のクラスタレベルのサービスがすぐにここに表示されます。

Example view of the first service discovery after completing the configuration.

次に、行ったすべての変更をアクティブにして、今後はダイナミックホストマネージメントに作業を任せます。 これにより、Kubernetes オブジェクトのすべてのホストが短時間で生成されます。

5. Kubernetes オブジェクトのラベル

Checkmk は、サービスディスカバリー中に、クラスタ、デプロイ、名前空間などのオブジェクトのラベルを自動的に生成します。 Checkmk が自動的に生成するこれらのオブジェクトのラベルは、すべてcmk/kubernetes/ で始まります。 たとえば、ポッドには、ノードからのラベル (cmk/kubernetes/node:mynode)、オブジェクトをポッドとして識別するラベル (cmk/kubernetes/object:pod)、および名前空間のラベル (cmk/kubernetes/namespace:mynamespace) が常に付与されます。 これにより、同じタイプまたは同じ名前空間にあるすべてのオブジェクトに対するフィルタやルールを非常に簡単に作成できます。

6. ダッシュボードとビュー

6.1. Kubernetes ダッシュボード

Checkmk の商業版には、Kubernetes 用の 6 つのビルトインダッシュボードが付属しています。 これらのダッシュボードを理解するには、クラスターコレクターをインストールして設定する必要があります。 具体的には、これらのダッシュボードは次のように呼ばれています。

  • Kubernetes (概要)

  • Kubernetesクラスタ

  • Kubernetes デーモンセット

  • Kubernetes デプロイメント

  • Kubernetes 名前空間

  • Kubernetes ステートフルセット

エントリポイントは常にKubernetes ダッシュボードで、Monitor > Applications > Kubernetes からアクセスできます。

Example of the overview dashboard.

Kubernetes ダッシュボードでは、監視対象のすべてのクラスタが左側にリスト表示されます。 このクラスタのリストは、ダッシュボードをさらに詳しく調べるためのエントリポイントでもあります。 クラスタの名前をクリックすると、選択したクラスタのKubernetes Cluster ダッシュボードに移動します。Kubernetes Cluster ダッシュボードで、それぞれの名前をクリックすると、他のコンテキスト依存のダッシュボードに移動します。

Detail of the cluster dashboard with paths to the other dashboards.

6.2. HW/SW インベントリ

Checkmk による OpenShift の監視では、HW/SW インベントリもサポートされています。 たとえば、上記のクラスタダッシュボードで、クラスタの ID 名(ここではmycluster )をクリックすると、そのクラスタのインベントリに移動します。

同様に、他のダッシュボードでも、オブジェクトの ID 名のボックスをクリックすると、それぞれのオブジェクトのインベントリを表示できます。 次の例は、ポッドの HW/SW インベントリを示しています。

kubernetes monitoring hw sw inventory

7. インストールチェック

Checkmk GUI で、インストールと設定が正常に行われたことを確認できます。

ここで最も重要なサービスは、間違いなくKubernetes API およびCluster collector です。 これらは、作成したクラスタホストに存在し、特定の実際の情報も表示されている必要があります。

The most important services to check for a correct installation.

Summary で、Kubernetes API サービスは通常、Live, Ready をレポートし、クラスターコレクターが設定されている場合は、Successfully queried usage data from Prometheus と表示されます。

Kubernetes ダッシュボードでは、クラスタコレクターがクラスタで実行され、データを収集しているかどうかを非常に早い段階で確認できます。 正しく設定されている場合、Kubernetes ダッシュボードは次のようになります。

Kubernetes dashboard with data for CPU and memory resources.

ここでクラスタ名をクリックすると、それぞれのクラスタの「Kubernetes Cluster 」ダッシュボードが表示されます。 ここでは、3 つのボックス「Primary datasource 」、「Cluster collector 」、「API health 」が緑色になり、「OK 」と表示されているはずです。

A correctly-functioning cluster monitoring.

8. OpenShift から監視コンポーネントを削除する

8.1. サービスアカウントの削除

デフォルトの YAML ファイルを使用してサービスアカウントを作成した場合は、次のようにしてそのアカウントを削除することもできます。

user@host:~$ oc delete -f https://raw.githubusercontent.com/Checkmk/checkmk_kube_agent/checkmk_docs/deploy/kubernetes/checkmk-serviceaccount.yaml
serviceaccount "checkmk" deleted
clusterrole.rbac.authorization.k8s.io "checkmk-metrics-reader" deleted
clusterrolebinding.rbac.authorization.k8s.io "checkmk-metrics-reader-binding" deleted

8.2. 必要に応じて名前空間を削除する

user@host:~$ oc delete namespace checkmk-monitoring
namespace "checkmk-monitoring" deleted
このページでは