モニタリングのための Kubernetes リソースのフィルタリング

最終更新日: 01 年 2023 月 XNUMX 日

Argusは、LogicMonitorによって監視されているすべてのKubernetesリソースを検出します。 さらに、Argusを使用してリソースを監視から除外できます。

フィルター パラメーターの下の Argus 構成ファイルにリソース フィルターを追加できます。 ルール エンジンはルールを順番に評価します。 最初のルールが満たされ、true と評価されると、ルール エンジンはルールの評価を中断し、リソースは除外されます。

構成例は次のとおりです。

フィルタ説明
'type in ("pod", "deployment") && name =~ "nginx"'ポッドとデプロイメントの名前に含まれる場合 nginx、それらのポッドとデプロイメントは除外されます。
'!(type == "pod" && namespace == "kube-system")'ホワイトリスト ルールとして単純化するルールを否定します。 kube-system 名前空間のポッドのみが監視され、残りのポッドは除外されます。
'namespace == "default"'
のすべてのリソースを除外します default 名前空間
'!(type != "replicaset" && ns == "logicmonitor")'内のレプリカセットを除外します LogicMonitor 名前空間 – 残りのリソースが含まれます。 さらに、この規則は 'type == "replicaset" && ns == "logicmonitor"

注: Helm チャートのシークレットのみを除外する場合のルールは次のとおりです。

argus:
 filters:
    "secret" && jsonGet(object, "type") == "helm.sh/release.v1"'

任意のタイプのすべてのリソースを除外する場合は、ワイルドカード表記「name =~.*」を使用してルールを追加する代わりに、監視無効リストにリソースを追加する必要があります。

例:

argus:
    monitoring:
       disable:
            - "replicasets"

LogicMonitorはオープンソースを使用しています ゴバリュエート フィルタ式を評価するためのライブラリ。 フィルタ式の構文の詳細については、 表現マニュアルを評価する.

ルールエンジン変数

ルールエンジンで使用できるようになっている次の変数を使用して、フィルタールールを記述できます。

変数名値のデータ型コメント
typeリソースタイプ文字列次の演算子は、型変数で機能します。 "==", "!=", "in"
Note: (既知の問題): 配列に要素が XNUMX つしかない場合、型変数の in 演算子は機能しません。
リソース名文字列
名前空間リソース名前空間文字列リソースがネームスペース スコープでない場合は空です。
キーを変数名として持つリソースラベルキーに対するリソースラベルの値文字列注: 毎回 ゴバリュエート ドキュメンテーションでは、特殊文字を含む変数名をエスケープする必要があります。 ドット (.)、ハイフン (-) などを角かっこで囲みます。
キーを変数名とするリソースアノテーションキーに対するリソース注釈の値文字列注: 毎回 ゴバリュエート ドキュメンテーションでは、特殊文字を含む変数名をエスケープする必要があります。 ドット (.)、ハイフン (-) などを角かっこで囲みます。

注: 注釈とラベルに同じキーが使用されている場合、ラベル値が優先され、評価に使用されます。

ルール作成ガイドライン

  1. YAML 変換での解析エラーを回避するために、ルールは単一引用符で囲まれた文字列で記述する必要があります。
  2. 包含ルール、除外ルールなどの区別があってはなりません。 ルールが true と評価された場合、リソースが除外されることを意味します。

注: 場合によっては、ルールを単純化したい場合は、包含ルールを記述し、その値を反転して除外ルールにすることができます。

:

単一の名前空間フロントエンドのリソースのみを監視する場合、ルールは次のとおりです。

'!(ns == "frontend")'

注: 毎回 ゴバリュエート ドキュメンテーションでは、特殊文字を含む変数名をエスケープする必要があります。 ドット (.)、ハイフン (-) などを角かっこで囲みます。

Web サービス ラベルを追加しました それぞれの価値を持つリソースについて。 残りのすべてのサービスの残りのリソースを除外して、ユーザー Web サービス リソースのみを監視する場合は、ルールを次のように記述できます。 '!([web-service] == "user")' – ここで角括弧は、ルールの解析中に、その中のすべてを変数名として定義します。 web-service 変数を取り逃した場合、Govaluate はそれを数式 web -(マイナス) service にします。 期待どおりにリソースを除外しません。

次の例は、クラスター内のリソースを選択的に監視するために使用できるいくつかの可能な構成を示しています。

filters:
# Remove NGINX pods and deployment from monitoring
- 'type in ("pod", "deployment") && name =~ "nginx"'
# Remove pods in kube-system namespace from monitoring
- '(type == "pod" && namespace == "kube-system")'
# Remove resources in the default namespace from monitoring
- 'namespace == "default"'
# Remove relicasets in the logicmonitor namespace from monitoring
- '(type != "replicaset" && ns == "logicmonitor")'

ルールを作成するために利用可能な演算子

演算子説明コメント
==平等完全一致文字列ns == "default"
!=不平等正確な文字列と等しくありませんname != "nginx"
=~正規表現の一致ドットとハイフンを含む正規表現が機能しない場合があるname =~ "nginx" リソースの名前に Nginx というプレフィックスが含まれている場合、そのリソースは除外されます
!~逆正規表現パターンに相当 !( )。name !~ “nginx” に相当 !(name =~ “nginx”)名前に Nginx が含まれていないリソースは除外されます
&&論理積左側の式が偽の場合は短絡ns == "default" && name =~ "nginx". これにより、名前に Nginx が含まれるデフォルトの名前空間のリソースが除外されます
||論理OR左側が true と評価された場合、短絡します。 演算子は使用できますが、一連のルールが OR されるため、左側と右側が論理的に接続されていない場合は、別のルールを作成する必要があります。
in配列のメンバーシップメンバーシップを確認するために等式==を実行しますns in ("kube-system", "kube-public")これにより、言及された名前空間のリソースが除外されます
()グループ化する括弧
記事上で