Kubernetes のモニタリング・エージェントのカスタマイズ
IBM Cloud Monitoring では、モニタリング・エージェントの構成をカスタマイズして、ログ・レベルの設定、ポートのブロック、メトリック・データの組み込みまたは除外、イベントの追加または削除、およびコンテナーのフィルターによる除外を行うことができます。
Kubernetes のモニタリング・エージェントをカスタマイズするには、sysdig-agent-configmap.yaml
ファイルを構成する必要があります。
構成ファイルを変更するには、以下の 2 つの方法を使用できます。
- 方法 1: エージェントが実行されているクラスターでファイルを直接変更します。
- 方法 2: ローカルでファイルを変更し、変更内容をクラスターに適用します。
kubectl edit を使用した Kubernetes のモニタリング・エージェントの構成の編集
Kubernetes のモニタリング・エージェントの構成を編集するには、以下のステップを実行します。
-
クラスター環境をセットアップします。 以下のコマンドを実行します。
最初に、環境変数を設定して Kubernetes 構成ファイルをダウンロードするためのコマンドを取得します。
ibmcloud ks cluster config --cluster <cluster_name_or_ID>
-
sysdig-agent-configmap.yaml ファイルを編集します。
以下のコマンドを実行します。
kubectl edit configmap sysdig-agent -n ibm-observe
変更を加えます。 注: 変更方法の詳細は、
vi
エディターの手順を参照してください。変更を保存します。 変更内容は自動的に適用されます。
kubectl apply を使用した Kubernetes のモニタリング・エージェントの構成の編集
ソース制御システムに保管および管理された yaml 構成ファイルがある場合は、この方法を使用します。
Kubernetes のモニタリング・エージェントの構成を編集するには、以下のステップを実行します。
-
ソース・コントローラーから各ファイルの最新コピーを取得します。
クラスターにデプロイされた構成でローカル・ファイルを作成する場合、以下のコマンドを実行することもできます。
kubectl get configmap sysdig-agent -n=ibm-observe -o=yaml > prod-sysdig-agent-configmap.yaml
-
構成を編集します。
-
以下のコマンドを使用して、変更内容を適用します。
kubectl apply -f sysdig-agent-configmap.yaml
エージェントを実行すると、Kubernetes がクラスター内のすべてのノードに変更内容をプッシュした後に、新しい構成が自動的にピックされます。
一連の Kubernetes イベントの収集
Monitoringイベント統合をサポートKubernetes。Monitoringエージェントはこれらのサービスを自動的に検出し、そこからイベント データを収集します。 エージェントの構成ファイルを編集して、そのデフォルトの動作を変更し、イベント・データを含めたり、除外したりできます。
デフォルトでは、限定されたイベント・セットのみが収集されます。 デフォルトで収集されるイベントの詳細については、イベントタイプを参照してください。
イベントを追加または削除するには、sysdig-agent-configmap.yaml ファイルをカスタマイズして、含めるイベントおよびフィルターで除外するイベントを指定する必要があります。 注: sysdig-agent-configmap.yaml のセクションのエントリーは、デフォルトの構成のセクション全体をオーバーライドします。
Kubernetes ポッドからイベントをフィルタリングするには、以下のステップを実行します。
-
クラスター環境をセットアップします。 以下のコマンドを実行します。
最初に、環境変数を設定して Kubernetes 構成ファイルをダウンロードするためのコマンドを取得します。
ibmcloud ks cluster config --cluster <cluster_name_or_ID>
-
sysdig-agent-configmap.yaml ファイルを編集します。
以下のコマンドを実行します。
kubectl edit configmap sysdig-agent -n ibm-observe
-
変更を加えます。 events セクションを追加するか、セクションを更新します。
注: 変更方法の詳細は、
vi
エディターの手順を参照してください。例えば、Kubernetes ポッドのプリング・イベントを収集し、デフォルトで収集されるその他のポッド・イベントをフィルターで除外するとします。 ただし、ノードおよび replicationControllers のデフォルトの Kubernetes イベントは収集するものとします。
events: kubernetes: pod: - Pulling
-
変更を保存します。
変更内容は自動的に適用されます。
Kubernetes イベントのサブセットの収集方法を確認できる別の例として、ポッドのプリング・イベント、プルされたイベント、および失敗したイベントのみをモニターするとします。
-
オプション 1: エントリーのシーケンスを箇条書きで定義します。
events: kubernetes: pod: - Pulling - Pulled - Failed
-
オプション 2: エントリーのシーケンスを大括弧で囲まれた 1 つの行で定義します。
events: kubernetes: pod: [Pulling, Pulled, Failed]
カスタム・イベントの処理方法について詳しくは、 カスタム・イベントを参照してください。
イベントの収集の無効化
モニタリング・エージェントの Kubernetes イベントの収集を無効にするには、sysdig-agent-configmap.yaml ファイルを変更する必要があります。 events セクションの Kubernetes エントリーを none に設定します。
以下のステップを実行します。
-
クラスター環境をセットアップします。 以下のコマンドを実行します。
最初に、環境変数を設定して Kubernetes 構成ファイルをダウンロードするためのコマンドを取得します。
ibmcloud ks cluster config --cluster <cluster_name_or_ID>
-
sysdig-agent-configmap.yaml ファイルを編集します。
以下のコマンドを実行します。
kubectl edit configmap sysdig-agent -n ibm-observe
-
変更を加えます。 events セクションを追加するか、セクションを更新します。
events: kubernetes: none
-
変更を保存します。
変更内容は自動的に適用されます。
メトリックの組み込みと除外
カスタム・メトリックをフィルタリングするには、sysdig-agent-configmap.yaml ファイルの metrics_filter セクションをカスタマイズする必要があります。 include と exclude のフィルタリング・パラメーターを構成して、含めるメトリックおよびフィルターで除外するメトリックを指定できます。
フィルタリング規則の順序は、メトリックに一致する最初のルールが適用されるように設定されています。 そのメトリックの後続規則は無視されます。
以下のステップを実行します。
-
クラスター環境をセットアップします。 以下のコマンドを実行します。
最初に、環境変数を設定して Kubernetes 構成ファイルをダウンロードするためのコマンドを取得します。
ibmcloud ks cluster config --cluster <cluster_name_or_ID>
-
sysdig-agent-configmap.yaml ファイルを編集します。
以下のコマンドを実行します。
kubectl edit configmap sysdig-agent -n ibm-observe
-
変更を加えます。 metrics_filter セクションを追加するか、セクションを更新します。
例えば、モニタリング・エージェントの metrics_filter セクションが以下のようであるとします。
metrics_filter: - include: metricA.* - exclude: metricA.* - include: metricB.* - include: haproxy.backend.* - exclude: haproxy.* - exclude: metricC.*
-
metricA、metricB、および haproxy.backend で始まるメトリックからのすべてのデータを収集するモニタリング・エージェントを構成しています。
-
metricC で始まるメトリックおよび haproxy で始まるその他のメトリックをフィルターで除外します。
-
エントリー
exclude: metricA.*
は無視されます。
-
-
変更を保存します。
変更内容は自動的に適用されます。
kubernetes オブジェクトおよびデータが収集されるコンテナーのフィルター処理
Kubernetes のモニタリング・エージェントでは、Prometheus メトリック、StatsD メトリック、JMX メトリック、app-checks メトリック、built-in メトリックなど、クラスターで検出されたすべてのコンテナーから自動的にメトリックが収集されます。
メトリックの収集からコンテナーを除外するように、モニタリング・エージェントをカスタマイズできます。
コンテナーを除外する場合は、以下の情報を考慮してください。
- エージェントとバックエンドの負荷を削減します。
- モニターするコンテナーからのみデータを収集します。
- 重要なコンテナーの報告、および不要または重要ではないコンテナーのフィルターによる除外によって、コストを制御できます。
モニタリング・エージェントがコンテナーをフィルタリングする機能を有効にするには、sysdig-agent-configmap.yaml ファイルをカスタマイズする必要があります。 containers セクションの use_container_filter エントリーを true に設定します。 注: デフォルトでは、この機能はオフになっています。 次に、適用する 1 つ以上の条件を含む規則を定義します。
以下の表は、クラスター内のフィルタリング規則を設定するために定義できるパラメーターの概要を示しています。
パラメーター | 条件 |
---|---|
container.image |
コンテナーのイメージ名 |
container.name |
コンテナー名 |
container.label.* |
コンテナーのラベル |
kubernetes.object.* |
Kubernetes オブジェクト。 オブジェクトはポッド、名前空間などにすることができます。 |
kubernetes.object.annotation.* |
Kubernetes オブジェクトのアノテーション |
kubernetes.object.label.* |
Kubernetes オブジェクトのラベル |
all |
すべてのオブジェクトを指定するデフォルトの規則 |
container_filter セクションで定義した規則のモニタリング・エージェントへの適用方法に関する以下の情報を考慮してください。
- 条件を定義するには、include および exclude フィルタリング・パラメーターを使用して条件を構成します。
- リストの最初のマッチング規則では、コンテナーを含めるか、または除外するかが決定されます。
- 条件はキー名と値で構成されます。 コンテナーの指定されたキーが値と一致する場合は、規則が適用されます。
- 規則に複数の条件が含まれる場合、規則が適用されるには、
all the conditions
が一致する必要があります。
クラスターでモニタリング・エージェントがモニターするコンテナーをフィルターで除外するには、以下のステップを実行します。
-
クラスター環境をセットアップします。 以下のコマンドを実行します。
最初に、環境変数を設定して Kubernetes 構成ファイルをダウンロードするためのコマンドを取得します。
ibmcloud ks cluster config --cluster <cluster_name_or_ID>
-
sysdig-agent-configmap.yaml ファイルを編集します。
以下のコマンドを実行します。
kubectl edit configmap sysdig-agent -n ibm-observe
-
変更を加えます。 use_container_filter エントリーと container_filter セクションを追加するか、既存のエントリーを更新します。
例えば、以下の構成マップの抽出を確認してください。
# Enable the feature use_container_filter: true # # Include or exclude conditions container_filter: - include: container.image: appdomain/my-app-image - include: container.name: my-java-app - exclude: kubernetes.namespace.name: kube-system
-
変更を保存します。
変更内容は自動的に適用されます。
ポートのブロック
ネットワーク・ポートからのネットワーク・トラフィックおよびメトリックをブロックするには、sysdig-agent-configmap.yaml ファイルの blacklisted_ports セクションをカスタマイズする必要があります。 データをフィルターで除外するポートをリストする必要があります。
ポート 53 (DNS) は常に不許可リストに含まれるので、blacklisted_ports で指定する必要はありません。
以下のステップを実行します。
-
クラスター環境をセットアップします。 以下のコマンドを実行します。
最初に、環境変数を設定して Kubernetes 構成ファイルをダウンロードするためのコマンドを取得します。
ibmcloud ks cluster config --cluster <cluster_name_or_ID>
-
sysdig-agent-configmap.yaml ファイルを編集します。
以下のコマンドを実行します。
kubectl edit configmap sysdig-agent -n ibm-observe
-
変更を加えます。 metrics_filter セクションを追加するか、セクションを更新します。
例えば、以下のサンプルは、ポート 6666 および 6379 からのデータを除外するようにモニタリング・エージェントの blacklisted_ports セクションを設定する方法を示しています。
blacklisted_ports: - 6666 - 6379
-
変更を保存します。
変更内容は自動的に適用されます。
ログ構成の変更
ログ構成を構成するには、sysdig-agent-configmap.yaml ファイルの log セクションをカスタマイズする必要があります。
モニタリング・エージェントが /opt/draios/logs/draios.log にログ・エントリーを生成します。
- ログ・ファイルのサイズが 10 MB に達すると、ログ・ファイルが交替します。
- 最新の 10 個のログ・ファイルが保持されます。 ファイル名に付加される日付スタンプが、保持するファイルの判別に使用されます。
以下の表は、一般的なシナリオとそれぞれの場合に設定する必要がある値を示しています。
ユース・ケース | log セクションのエントリー | デフォルト値 |
---|---|---|
エージェントの動作のトラブルシューティング | file_priority: debug |
info |
コンテナー・コンソールの出力の削減 | console_priority: warning |
info |
重大度別のイベントのフィルター処理 | event_priority: warning |
information |
含まれるメトリックと除外されるメトリックの確認 | metrics_excess_log: true |
false |
ログ・レベルの変更
- log セクションの file_priority は、ファイル
/opt/draios/logs/draios.log
に書き込まれるログ・エントリーのタイプを制御します。 - log セクションの console_priority は、コンテナー化されたエージェントを実行したときにコンテナー・コンソールの出力に書き込まれるログ・エントリーのタイプを制御します。
- デフォルトのログ・レベルは info です。警告およびエラーのエントリー以外に、1 秒あたり 1 回のバックエンド・サーバーへの集計メトリック伝送ごとにログ・エントリーが作成されます。
- 有効なログ・レベルは、none、error、warning、info、debug、および trace です。
重大度別の Kubernetes イベントのフィルター処理
- log セクションの event_priority は、エージェントから送信されるイベントのタイプを制御します。
- デフォルトのログ・レベルは information です。 この場合、情報以上の重大度のイベントのみが伝送されます。
- 有効なレベルは、emergency、alert、critical、error、warning、notice、information、debug、および none です。 注: 値は優先度の高いものから低いものの順にリストされます。
- レベルを
none
に設定すると、すべてのイベントの収集がブロックされます。
含まれるメトリックと除外されるメトリックのファイルへのロギング
-
log セクションで metrics_excess_log を true に設定すると、含まれるカスタム・メトリックと除外されるカスタム・メトリックのロギングが有効になります。
-
デフォルトでは、メトリックのロギングは無効になっています。
-
ロギングは INFO レベルで 30 秒ごとに発生し、10 秒間続きます。
-
エージェントによって書き込まれるメトリックのロケーションを指定するには、metricsfile 設定が必要です。
metricsfile.location
値は、/opt/draios ディレクトリーの下の相対パスです。 注:metricsfile
エントリーはlog
と同じレベルで指定されます (yaml 形式の子としてではありません)。 -
データのロギングは以下のようにフォーマットされます。
+/-[type] [metric included/excluded]: metric.name (filter: +/-[metric.filter])
-
+/- は、メトリックが含まれるか除外されるかを示す記号です。 プラス (+) は、メトリックが含まれることを示します。 マイナス (-) は、メトリックが除外されることを示します。
-
*[type]*はメトリックの種類を指定します(例:statsd)。
-
*[metric included/excluded]*は、メトリックが含まれるか除外されるかを人間が読みやすい方法で示します。
-
metric.name は、メトリック名を示します。
-
*(filter: +/-metric[metric.filter]) *は、sysdig-agent-configmap.yamlファイルの metrics_filter セクションで定義されているフィルターに関する情報を提供します。
-
サンプル・ログ・エントリーは、以下のようになります。
-[statsd] metric excluded: mongo.statsd.vsize (filter: -[mongo.statsd.*])
+[statsd] metric included: mongo.statsd.netIn (filter: +[mongo.statsd.net*])
ログ設定を構成するには、以下のステップを実行します。
-
クラスター環境をセットアップします。 以下のコマンドを実行します。
最初に、環境変数を設定して Kubernetes 構成ファイルをダウンロードするためのコマンドを取得します。
ibmcloud ks cluster config --cluster <cluster_name_or_ID>
-
sysdig-agent-configmap.yaml ファイルを編集します。
以下のコマンドを実行します。
kubectl edit configmap sysdig-agent -n ibm-observe
-
変更を加えます。 log セクションを追加するか、このセクションを更新して、前の説明に基づいて変更する構成を組み込みます。
以下に例を示します。
log: file_priority: warning console_priority: info event_priority: warning metrics_excess_log: true metricsfile: { location : metrics }
-
変更を保存します。
変更内容は自動的に適用されます。
サンプルの configmap yaml ファイル
apiVersion: v1
data:
dragent.yaml: |
### Agent tags
# tags: linux:ubuntu,dept:dev,local:nyc
####
# collector address
# collector: 192.168.1.1
# Collector TCP port
# collector_port: 6666
# Whether collector accepts ssl
# ssl: true
# collector certificate validation
# ssl_verify_certificate: true
#######################################
#
k8s_cluster_name: cluster12
collector: ingest.us-south.monitoring.cloud.ibm.com
collector_port: 6443
ssl: true
ssl_verify_certificate: true
sysdig_capture_enabled: false
new_k8s: true
tags: type:mycluster,region:us-south
blacklisted_ports:
- 6666
- 6379
events:
kubernetes:
node:
- Rebooted
metrics_filter:
- include: metricA.*
- exclude: metricA.*
- include: metricB.*
use_container_filter: true
container_filter:
- exclude:
kubernetes.namespace.name: kube-system
log:
file_priority: warning
console_priority: info
event_priority: warning
metrics_excess_log: true
metricsfile: { location : metrics }
kind: ConfigMap
metadata:
annotations:
...