tencent cloud

Tencent Kubernetes Engine

ドキュメントTencent Kubernetes Engine

CRDを使用したログ収集の設定

ダウンロード
フォーカスモード
フォントサイズ
最終更新日: 2023-04-26 16:53:29

ユースケース

ログ収集の設定は、コンソールを使用してログ収集の設定を行うだけでなく、CustomResourceDefinitions(CRD)方式でも行うことができます。CRDはコンテナ標準出力、コンテナファイルおよびホストファイルの収集をサポートし、複数の形式でのログ収集をサポートしています。CLSへの配信およびCKafkaなどのコンシューマー側をサポートします。

前提条件

TKEコンソールの運用保守機能管理でログ収集を有効にしていること。

CRDの説明

構造一覧

apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig ## デフォルト値
metadata:
name: test ## CRDリソース名。クラスター内で一意
spec:
clsDetail: ## CLSへの配信の設定
...
inputDetail: ## 収集データソース設定
...
kafkaDetail: ## ckafkaまたは自作kafkaへの配信の設定
...
status: ## CRDリソースの状態
status: ""
code: "" ## インターフェース呼び出しエラーが発生した場合に、インターフェースから返されるエラーコード
reason: "" ## エラー理由

clsDetailフィールドの説明

注意
topicは指定後に変更できません。
clsDetail:
## ログトピックを自動作成します。ログセットおよびトピックのnameを同時に指定する必要があります
logsetName: test ## CLSログセットのname。このnameのログセットがなければ自動的に作成し、ある場合は、このログセットの下にログトピックを作成します
topicName: test ## CLSログトピックのname。このnameのログトピックがなければ自動的に作成します

# 既存のログセットとログトピックを選択します。ログセットが指定されていて、ログトピックが指定されていない場合は、自動的にログトピックが作成されます
logsetId: xxxxxx-xx-xx-xx-xxxxxxxx ## CLSログセットのID。ログセットはCLS内にあらかじめ作成しておく必要があります
topicId: xxxxxx-xx-xx-xx-xxxxxxxx ## CLSログトピックのID。ログトピックはCLS内にあらかじめ作成し、かつ他の収集設定に占有されていないことが必要です

logType: json_log ## ログ収集の形式。json_logはjson形式を表し、delimiter_logは区切り文字形式を表します。minimalist_logはシングルライン全文形式を、multiline_logはマルチライン全文形式を、fullregex_logは完全正規表現形式をそれぞれ表します。デフォルトではminimalist_logです
logFormat: xxx ## ログのフォーマット
period: 30 ## ライフサイクル。単位は日、可能な値の範囲は1~3600です。値が3640の場合は永久保存を表します
partitionCount: ## Integerタイプで、ログトピックのパーティション数です。デフォルトでは1個作成し、最大で10個のパーティションを作成できます。
tags: ## タグ記述リスト。このパラメータを指定することで、タグを同時に対応するログトピックにバインドできます。最大9個のタグキーバリューペアを作成できますが、同一のリソースは同一のタグキーにしかバインドできません。
- key: xxx ## タグkey
value: xxx ## タグvalue
autoSplit: false ## booleanタイプ、自動分割を有効にするかどうか。デフォルト値はtrueです
maxSplitPartitions:
storageType: hot ## ログトピックのストレージタイプ。オプション値はhot(標準ストレージ)、cold(低頻度ストレージ)で、デフォルトではhotです。
excludePaths: ## ブラックリストパスリストの収集
- type: File ## タイプ、オプションはFileまたはPathです
value: /xx/xx/xx/xx.log ## typeの対応する値
indexs: ## topic作成時にカスタマイズ可能なインデックス方式およびフィールド
- indexName: ## キー値またはメタフィールドインデックスのフィールドを設定する必要があります。メタフィールドKeyにはプレフィックス__TAG__.を追加する必要がなく、ログをアップロードする際に対応するフィールドKeyが一致することで設定できます。Tencent Cloudコンソールで表示する際はプレフィックス__TAG__.が自動的に追加されます
indexType: ## フィールドタイプ。現在はlong、text、doubleタイプをサポートしています
tokenizer: ## フィールドの区切り文字。この中のそれぞれの文字が区切り文字を表します。英字記号および\\n\\t\\rのみをサポートしています。longおよびdoubleタイプのフィールドは空にしておきます。textタイプのフィールドでは @&?|#()='",;:<>[]{}/ \\n\\t\\r\\ を区切り文字として使用することを推奨します。
sqlFlag: ## boolean フィールドで分析機能を有効にしているかどうか
containZH: ## boolean 中国語が含まれるかどうか
region: ap-xxx ## topicの所在リージョン。クロスリージョン配信に使用します
userDefineRule: xxxxxx ## ユーザー定義の収集ルール。Json形式でシリアライズした文字列です
extractRule: {} ## 抽出、フィルタリングルール。 ExtractRuleを設定した場合は、LogTypeを設定する必要があります

inputDetailフィールドの説明

inputDetail:
type: container_stdout ## ログ収集のタイプ。container_stdout(コンテナ標準出力)、container_file(コンテナファイル)、host_file(ホストファイル)が含まれます

containerStdout: ## コンテナ標準出力
namespace: default ## 収集コンテナのkubernetesネームスペース。複数のネームスペースをサポートしており、複数のネームスペースがある場合は「,」で区切ります(例:default,namespace)。 指定しない場合はすべてのネームスペースを表します。注意:excludeNamespaceとは同時に指定できません
excludeNamespace: nm1,nm2 ## 収集コンテナのkubernetesネームスペースを除外します。複数のネームスペースをサポートしており、複数のネームスペースがある場合は「,」で区切ります(例::nm1,nm2)。 指定しない場合はすべてのネームスペースを表します。注意:namespaceとは同時に指定できません
nsLabelSelector: environment in (production),tier in (frontend) ## ネームスペースlabelに基づくフィルタリングで合致したnamespace
allContainers: false ## 指定のネームスペース内のすべてのコンテナの標準出力を収集するかどうか。注意:allContainers=trueの場合はworkloa、includeLabels、excludeLabelsを同時に指定することはできません
container: xxx ## ログを収集するコンテナ名。空の場合は、コンテナに合致するログ名をすべて収集することを表します。
excludeLabels: ## 収集に指定のlabelを含むPodを含めません。workload、namespace、excludeNamespaceとは同時に指定できません
key2: value2 ## 同一のkey下にある複数のvalue値のpodのマッチングをサポートします。例えばenviroment = production,qaと入力した場合、keyがenviroment、value値がproductionまたはqaの場合はすべて除外されることを表します。複数のvalue値を入力する場合はコンマで区切ることにご注意ください。includeLabelsを同時に指定すると、includeLabelsとの共通部分のpodがマッチします

includeLabels: ## 指定のlabelを含むPodを収集します。workload、namespace、excludeNamespaceとは同時に指定できません
key: value1 ## 収集ルールで収集されたログにはmetadataが含まれ、コンシューマー側にレポートされます。同一のkey下にある複数のvalue値のpodのマッチングをサポートします。例えばenviroment = production,qaと入力した場合、keyがenviroment、value値がproductionまたはqaの場合はすべてマッチングされることを表します。複数のvalue値を入力する場合はコンマで区切ることにご注意ください。excludeLabelsを同時に指定すると、excludeLabelsとの共通部分のpodがマッチします

metadataLabels: ## 具体的にどのpod labelがメタデータとして収集されるかを指定します。指定しない場合はすべてのpod labelがメタデータとして収集されます
- label1
customLabels: ## ユーザー定義のmetadata
label: l1

workloads:
- container: xxx ## 収集するコンテナ名。指定しない場合はworkload Pod内のすべてのコンテナを表します
kind: deployment ## workloadタイプ。deployment、daemonset、statefulset、job、cronjobをサポートします
name: sample-app ## workloadの名前
namespace: prod ## workloadのネームスペース

containerFile: ## コンテナ内のファイル
namespace: default ## 収集コンテナのkubernetesネームスペース。1つのネームスペースを必ず指定する必要があります
excludeNamespace: nm1,nm2 ## 収集コンテナのkubernetesネームスペースを除外します。複数のネームスペースをサポートしており、複数のネームスペースがある場合は「,」で区切ります(例::nm1,nm2)。 指定しない場合はすべてのネームスペースを表します。注意:namespaceとは同時に指定できません
nsLabelSelector: environment in (production),tier in (frontend) ## ネームスペースlabelに基づくフィルタリングで合致したnamespace
container: xxx ## ログを収集するコンテナ名。 * の場合は、コンテナに合致するログ名をすべて収集することを表します
logPath: /var/logs ## ログフォルダ。ワイルドカードはサポートしていません
filePattern: app_*.log ## ログファイル名。ワイルドカード * と ? をサポートしています。* は複数の任意の文字をマッチングすることを表し、? は単一の任意の文字をマッチングすることを表します
customLabels: ## ユーザー定義のmetadata
key: value
excludeLabels: ## 収集に指定のlabelを含むPodを含めません。workloadとは同時に指定できません
key2: value2 ## 同一のkey下にある複数のvalue値のpodのマッチングをサポートします。例えばenviroment = production,qaと入力した場合、keyがenviroment、value値がproductionまたはqaの場合はすべて除外されることを表します。複数のvalue値を入力する場合はコンマで区切ることにご注意ください。includeLabelsを同時に指定すると、includeLabelsとの共通部分のpodがマッチします

includeLabels: ## 指定のlabelを含むPodを収集します。workloadとは同時に指定できません
key: value1 ## 収集ルールで収集されたログにはmetadataが含まれ、コンシューマー側にレポートされます。同一のkey下にある複数のvalue値のpodのマッチングをサポートします。例えばenviroment = production,qaと入力した場合、keyがenviroment、value値がproductionまたはqaの場合はすべてマッチングされることを表します。複数のvalue値を入力する場合はコンマで区切ることにご注意ください。excludeLabelsを同時に指定すると、excludeLabelsとの共通部分のpodがマッチします
metadataLabels: ## 具体的にどのpod labelがメタデータとして収集されるかを指定します。指定しない場合はすべてのpod labelがメタデータとして収集されます
- label1 ## pod label
workload:
container: xxx ## 収集するコンテナ名。指定しない場合はworkload Pod内のすべてのコンテナを表します
name: sample-app ## workloadの名前

hostFile: ## ノードファイルパス
filePattern: '*.log' ## ログファイル名。ワイルドカード * と ? をサポートしています。* は複数の任意の文字をマッチングすることを表し、? は単一の任意の文字をマッチングすることを表します
logPath: /tmp/logs ## ログフォルダ。ワイルドカードはサポートしていません
customLabels: ## ユーザー定義のmetadata
label1: v1
extractRuleの対象の説明
名前
タイプ
入力必須項目
説明
timeKey
String
いいえ
時間フィールドのkeyの名前。time_keyとtime_formatは必ず対になります。
timeFormat
String
いいえ
時間フィールドの形式。C言語のstrftime関数の時間形式についての説明を参照してパラメータを出力します。
delimiter
String
いいえ
区切り文字タイプのログの区切り文字。log_typeがdelimiter_logの場合のみ有効です。
logRegex
String
いいえ
ログ全体のマッチングルール。log_typeがfullregex_logの場合のみ有効です。
beginningRegex
String
いいえ
行頭のマッチングルール。log_typeがmultiline_logまたはfullregex_logの場合のみ有効です。
unMatchUpload
String
いいえ
解析に失敗したログをアップロードするかどうか。trueはアップロードすること、falseはアップロードしないことを表します。
unMatchedKey
String
いいえ
失敗したログのkey。
backtracking
String
いいえ
増分収集モードでのバックトラッキングデータ量。デフォルトでは-1(全量収集)であり、0は増分を表します。
keys
Array of String
いいえ
取得した各フィールドのkeyの名前。空のkeyはこのフィールドが破棄されたことを表します。log_typeがdelimiter_logの場合のみ有効です。json_logのログはjson自体のkeyを使用します。
filterKeys
Array of String
いいえ
フィルタリングしたいログのkey。添え字によってFilterRegexに対応します。
filterRegex
Array of String
いいえ
フィルタリングしたいログのkeyに対応するregex。添え字によってFilterKeysに対応します。
isGBK
String
いいえ
Gbkエンコードかどうか。0:いいえ、1: はい。
注意:このフィールドは、有効な値が取得できないことを表すnullを返す場合があります。
jsonStandard
String
いいえ
標準jsonかどうか。0:いいえ、1: はい。
注意:このフィールドは、有効な値が取得できないことを表すnullを返す場合があります。

kafkaDetailフィールドの説明

kafkaDetail:
brokers: x.x.x.x:p ## 入力必須、brokerアドレス。通常はドメイン名:ポートであり、複数のアドレスは「,」で区切ります
topic: test ##
kafkaType: CKafka ## kafkaタイプ。CKafka - ckafka、SelfBuildKafka - 自作kafka
instanceId: xxxx ## kafkaType = CKafkaの場合、ckafkaインスタンスidを設定します
logType: minimalist_log ## kafkaログ解析タイプ。"minimalist_log"または""はシングルライン全文、"multiline_log"はマルチライン全文、"json"はjson形式
timestampFormat: xxx ## タイムスタンプの形式。デフォルトではdouble
timestampKey: xxx ## タイムスタンプのkey値。デフォルトでは"@timestamp"
metadata:
formatType: default ## metatdata形式。 "default"はデフォルト形式(eks kafkaキャプチャと同じ)、"filebeat"はfilebeat形式、"fluent-bit"はfluent-bit形式
messageKey: ## 1個のKeyを指定し、ログを指定のパーティションに配信することができます。デフォルトでは無効で、日付によってランダムに送信されます。有効にすると、同様のKeyを持つログは同一のパーティション内に配信されます。PodフィールドをKeyとして選択できます。Pod nameの場合、Field>metadata.nameを選択してください
value: Field ## 入力必須、topicID
valueFrom:
fieldRef:
fieldPath: metadata.name ## keyがFieldの場合にmetadata.name、metadata.namespace、spec.nodeName、spec.serviceAccountNameを選択できます

statusフィールドの説明

status
説明
ステータスが空
初期状態
Synced
収集設定の処理に成功しました
Stale
収集設定の処理に失敗しました

CRDの例

コンテナ標準出力CRDの設定の例

すべてのコンテナ
ワークロードを指定する
指定 pod Labels
ネームスペースの指定
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: "test"
spec:
clsDetail:
.......
topicId: xxxxxx-xx-xx-xx-xxxxxxxx
inputDetail:
containerStdout:
allContainers: true
namespace: default,kube-public
type: container_stdout

ネームスペースの除外
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: "test"
spec:
clsDetail:
........
topicId: xxxxxx-xx-xx-xx-xxxxxxxx
inputDetail:
containerStdout:
allContainers: true
excludeNamespace: kube-system,kube-node-lease
type: container_stdout

apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: "test"
spec:
clsDetail:
......
topicId: xxxxxx-xx-xx-xx-xxxxxxxx
inputDetail:
containerStdout:
allContainers: false
workloads:
- container: prod
kind: deployment
name: sample-app
namespace: kube-system
type: container_stdout
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: test
spec:
clsDetail:
......
topicId: xxxxxx-xx-xx-xx-xxxxxxxx
inputDetail:
containerStdout:
container: prod
excludeLabels:
key2: v2
includeLabels:
key1: v1
namespace: default,kube-system
type: container_stdout

コンテナファイルパスCRDの設定の例

ワークロードを指定する
指定 pod Labels
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: test
spec:
clsDetail:
.......
topicId: xxxx-xx-xx-xx-xxxx
inputDetail:
containerFile:
container: prod
filePattern: '*.log'
logPath: /tmp/logs
namespace: kube-system
workload:
kind: deployment
name: sample-app
type: container_file
apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
name: test
spec:
clsDetail:
.......
topicId: xxxx-xx-xx-xx-xxxx
inputDetail:
containerFile:
container: prod
filePattern: '*.log'
includeLabels:
key1: v1
excludeLabels:
key2: v2
logPath: /tmp/logs
namespace: default,kube-public
type: container_file

ノードファイルパスCRDの設定の例

apiVersion: cls.cloud.tencent.com/v1
kind: LogConfig
metadata:
creationTimestamp: "2022-03-13T12:48:49Z"
generation: 4
name: test
resourceVersion: "11729531"
selfLink: /apis/cls.cloud.tencent.com/v1/logconfigs/test
uid: 233f4b72-cfef-4a43-abb8-e4d033185097
spec:
clsDetail:
.......
topicId: xxxx-xx-xx-xx-xxxx
inputDetail:
hostFile:
customLabels:
testmetadata: v1
filePattern: '*.log'
logPath: /var/logs
type: host_file


ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック