OpenShift Pipeline の可観測性
OpenShift Pipeline の可観測性機能
概要
第1章 OpenShift Pipelines の可観測性のために Tekton 結果を使用する リンクのコピーリンクがクリップボードにコピーされました!
Tekton Results は、すべてのパイプライン実行とタスク実行の完全な情報をアーカイブするサービスです。必要に応じて PipelineRun リソースと TaskRun リソースをプルーニングし、Tekton Results API または opc コマンドラインユーティリティーを使用して、それらの YAML マニフェストとログ情報にアクセスできます。
1.1. Tekton Results の概念 リンクのコピーリンクがクリップボードにコピーされました!
Tekton Results は、パイプラインの実行とタスクの実行を結果とレコードの形式でアーカイブします。
実行が完了した PipelineRun および TaskRun カスタムリソース (CR) ごとに、Tekton Results は レコード を作成します。
結果 には、1 つまたは複数のレコードを含めることができます。レコードは、常に 1 つの結果に含まれています。
結果はパイプライン実行に対応し、PipelineRun CR 自体のレコードと、パイプライン実行の一部として開始されたすべての TaskRun CR のレコードが含まれます。
タスク実行がパイプライン実行を使用せずに直接開始された場合、このタスク実行の結果が作成されます。この結果には、同じタスク実行のレコードが含まれます。
各結果には、PipelineRun または TaskRun CR が作成された namespace と CR の UUID が含まれる名前が付けられます。結果名の形式は <namespace_name>/results/<parent_run_uuid> です。この形式では、<parent_run_uuid> はパイプライン実行の UUUD、または直接開始されたタスク実行の UUUD です。
結果名の例
results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed
results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed
各レコードには、レコードを含む結果の名前と、レコードが対応する PipelineRun または TaskRun CR の UUID を含む名前が付いています。結果名の形式は <namespace_name>/results/<parent_run_uuid>/results/<run_uuid> です。
レコード名の例
results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e9c736db-5665-441f-922f-7c1d65c9d621
results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e9c736db-5665-441f-922f-7c1d65c9d621
レコードには、実行完了後に存在していた TaskRun または PipelineRun CR の完全な YAML マニフェストが含まれます。このマニフェストには、実行の仕様、実行に指定されたアノテーションのほか、完了時刻や実行が成功したかどうかなど、実行の結果に関する特定の情報が含まれます。
TaskRun または PipelineRun CR が存在している間は、次のコマンドを使用して YAML マニフェストを表示できます。
oc get pipelinerun <cr_name> -o yaml
$ oc get pipelinerun <cr_name> -o yaml
Tekton Results は、TaskRun または PipelineRun CR が削除された後もこのマニフェストを保存し、表示および検索できるようにします。
完了後に実行されるパイプラインの YAML マニフェストの例
すべての結果とレコードにその名前でアクセスできます。Common Expression Language (CEL) クエリーを使用して、YAML マニフェストなど、そのクエリーに含まれる情報によって結果とレコードを検索することもできます。
また、Tekton Results を設定して、パイプラインまたはタスクの一部として実行されたすべてのツールのログ情報を LokiStack に転送できるようにすることもできます。その後、Tekton Results を照会して、Tekton Results レコードに関連付けられたタスク実行のログ情報を取得できます。
1.2. Tekton の結果の設定 リンクのコピーリンクがクリップボードにコピーされました!
OpenShift Pipelines をインストールすると、Tekton Results がデフォルトで有効になります。
ただし、パイプライン実行とタスク実行のログ情報を保存してアクセスする場合は、この情報を LokiStack に転送するように設定する必要があります。
オプションで、Tekton Results の追加設定を完了できます。
1.2.1. ログ情報の LokiStack 転送の設定 リンクのコピーリンクがクリップボードにコピーされました!
Tekton Results を使用してタスク実行のログ情報を照会する場合は、OpenShift Container Platform クラスターに LokiStack と OpenShift ロギングをインストールし、ログ情報を LokiStack に転送するように設定する必要があります。
ログ情報の LokiStack 転送が設定されていない場合、Tekton Results でこの情報は保存されず、コマンドラインインターフェイスまたは API からも提供されません。
前提条件
-
OpenShift CLI (
oc) ユーティリティーがインストールされている。 - クラスター管理者ユーザーとして OpenShift Container Platform クラスターにログインした。
手順
LokiStack 転送を設定するには、次の手順を実行します。
- OpenShift Container Platform クラスターで、Loki Operator を使用して LokiStack をインストールし、さらに OpenShift Logging Operator もインストールします。
OpenShift Logging バージョン 6 またはバージョン 5 のどちらをインストールしたかに応じて、次のいずれかの YAML マニフェストを使用して、
ClusterLogForwarderカスタムリソース (CR) のClusterLogForwarder.yamlマニフェストファイルを作成します。OpenShift Logging バージョン 6 をインストールしている場合の
ClusterLogForwarderCR の YAML マニフェストCopy to Clipboard Copied! Toggle word wrap Toggle overflow OpenShift Logging バージョン 5 をインストールしている場合の
ClusterLogForwarderCR の YAML マニフェストCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、
openshift-loggingnamespace にClusterLogForwarderCR を作成します。oc apply -n openshift-logging ClusterLogForwarder.yaml
$ oc apply -n openshift-logging ClusterLogForwarder.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、
TektonConfigカスタムリソース (CR) を編集します。oc edit TektonConfig config
$ oc edit TektonConfig configCopy to Clipboard Copied! Toggle word wrap Toggle overflow result仕様に次の変更を加えます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2.2. 外部データベースサーバーの設定 リンクのコピーリンクがクリップボードにコピーされました!
Tekton Results は、PostgreSQL データベースを使用してデータを保存します。デフォルトでは、インストールには内部 PostgreSQL インスタンスが含まれます。デプロイメント内にすでに存在する外部 PostgreSQL サーバーを使用するようにインストールを設定できます。
手順
次のコマンドを入力して、PostgreSQL サーバーに接続するための認証情報を含むシークレットを作成します。
oc create secret generic tekton-results-postgres \ --namespace=openshift-pipelines \ --from-literal=POSTGRES_USER=<user> \ --from-literal=POSTGRES_PASSWORD=<password>
$ oc create secret generic tekton-results-postgres \ --namespace=openshift-pipelines \ --from-literal=POSTGRES_USER=<user> \ --from-literal=POSTGRES_PASSWORD=<password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを使用して、
TektonConfigカスタムリソース (CR) を編集します。oc edit TektonConfig config
$ oc edit TektonConfig configCopy to Clipboard Copied! Toggle word wrap Toggle overflow result仕様に次の変更を加えます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.2.3. Tekton Results の保持ポリシーの設定 リンクのコピーリンクがクリップボードにコピーされました!
デフォルトでは、Tekton Results はパイプラインの実行、タスクの実行、イベント、およびログを無期限に保存します。これにより、ストレージリソースが不必要に使用され、データベースのパフォーマンスに影響する可能性があります。
クラスターレベルで Tekton Results の保持ポリシーを設定して、古い結果とそれに関連するレコードおよびログを削除できます。
手順
次のコマンドを使用して、
TektonConfigカスタムリソース (CR) を編集します。oc edit TektonConfig config
$ oc edit TektonConfig configCopy to Clipboard Copied! Toggle word wrap Toggle overflow result仕様に次の変更を加えます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
1.3. opc コマンドラインユーティリティーを使用した Tekton Results のクエリー リンクのコピーリンクがクリップボードにコピーされました!
opc コマンドラインユーティリティーを使用して、Tekton Results に結果とレコードを問い合わせることができます。opc コマンドラインユーティリティーをインストールするには、tkn コマンドラインユーティリティーのパッケージをインストールします。このパッケージのインストール手順は、tkn のインストール を参照してください。
レコードと結果の名前を使用して、その中に含まれるデータを取得できます。
Common Expression Language (CEL) クエリーを使用して結果とレコードを検索できます。これらの検索では、結果またはレコードの UUID が表示されます。提供された例を使用して、一般的な検索タイプのクエリーを作成できます。参照情報を使用して他のクエリーを作成することもできます。
1.3.1. Tekton Results をクエリーするための opc ユーティリティー環境の準備 リンクのコピーリンクがクリップボードにコピーされました!
Tekton Results をクエリーする前に、opc ユーティリティーの環境を準備する必要があります。
前提条件
-
opcユーティリティーがインストールされている。
手順
次のコマンドを入力して、
RESULTS_API環境変数を Tekton Results API へのルートに設定します。export RESULTS_API=$(oc get route tekton-results-api-service -n openshift-pipelines --no-headers -o custom-columns=":spec.host"):443
$ export RESULTS_API=$(oc get route tekton-results-api-service -n openshift-pipelines --no-headers -o custom-columns=":spec.host"):443Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、Tekton Results API の認証トークンを作成します。
oc create token <service_account>
$ oc create token <service_account>Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドが出力する文字列を保存します。
オプション: Tekton Results API による自動認証用に
~/.config/tkn/results.yamlファイルを作成します。ファイルには次の内容が含まれている必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- Tekton Results API へのルート。
RESULTS_APIに設定したものと同じ値を使用します。 - 2
oc create tokenコマンドによって作成された認証トークン。このトークンを指定すると、service_account設定がオーバーライドされ、opcはこのトークンを使用して認証します。- 3
- API エンドポイント用に設定した SSL 証明書を含むファイルの場所。
- 4
- OpenShift Pipelines のカスタムターゲット namespace を設定した場合は、
openshift-pipelinesをこの namespace の名前に置き換えます。 - 5 6
- Tekton Results API で認証するためのサービスアカウントの名前。認証トークンを指定した場合は、
service_accountパラメーターを指定する必要はありません。
あるいは、
~/.config/tkn/results.yamlファイルを作成しない場合は、--authtokenオプションを使用して各opcコマンドにトークンを渡すことができます。
1.3.2. 名前による結果とレコードのクエリー リンクのコピーリンクがクリップボードにコピーされました!
名前を使用して、結果とレコードをリスト表示したり、クエリーを実行したりできます。
前提条件
-
opcユーティリティーをインストールし、Tekton Results をクエリーするための環境を準備している。 -
jqパッケージがインストールされている。 - (ログ情報を照会する場合) LokiStack へのログ転送が設定されている。
手順
namespace で作成されたパイプライン実行およびタスク実行に対応するすべての結果の名前をリストします。以下のコマンドを実行します。
opc results list --addr ${RESULTS_API} <namespace_name>$ opc results list --addr ${RESULTS_API} <namespace_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの例
opc results list --addr ${RESULTS_API} results-testing$ opc results list --addr ${RESULTS_API} results-testingCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Name Start Update results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed 2023-06-29 02:49:53 +0530 IST 2023-06-29 02:50:05 +0530 IST results-testing/results/ad7eb937-90cc-4510-8380-defe51ad793f 2023-06-29 02:49:38 +0530 IST 2023-06-29 02:50:06 +0530 IST results-testing/results/d064ce6e-d851-4b4e-8db4-7605a23671e4 2023-06-29 02:49:45 +0530 IST 2023-06-29 02:49:56 +0530 IST
Name Start Update results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed 2023-06-29 02:49:53 +0530 IST 2023-06-29 02:50:05 +0530 IST results-testing/results/ad7eb937-90cc-4510-8380-defe51ad793f 2023-06-29 02:49:38 +0530 IST 2023-06-29 02:50:06 +0530 IST results-testing/results/d064ce6e-d851-4b4e-8db4-7605a23671e4 2023-06-29 02:49:45 +0530 IST 2023-06-29 02:49:56 +0530 ISTCopy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、結果内のすべてのレコードの名前をリスト表示します。
opc results records list --addr ${RESULTS_API} <result_name>$ opc results records list --addr ${RESULTS_API} <result_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの例
opc results records list --addr ${RESULTS_API} results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed$ opc results records list --addr ${RESULTS_API} results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bedCopy to Clipboard Copied! Toggle word wrap Toggle overflow 出力例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次のコマンドを入力して、レコードからパイプライン実行またはタスク実行の YAML マニフェストを取得します。
opc results records get --addr ${RESULTS_API} <record_name> \ | jq -r .data.value | base64 -d | \ xargs -0 python3 -c 'import sys, yaml, json; j=json.loads(sys.argv[1]); print(yaml.safe_dump(j))'$ opc results records get --addr ${RESULTS_API} <record_name> \ | jq -r .data.value | base64 -d | \ xargs -0 python3 -c 'import sys, yaml, json; j=json.loads(sys.argv[1]); print(yaml.safe_dump(j))'Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの例
opc results records get --addr ${RESULTS_API} \ results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e9c736db-5665-441f-922f-7c1d65c9d621 | \ jq -r .data.value | base64 -d | \ xargs -0 python3 -c 'import sys, yaml, json; j=json.loads(sys.argv[1]); print(yaml.safe_dump(j))'$ opc results records get --addr ${RESULTS_API} \ results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/records/e9c736db-5665-441f-922f-7c1d65c9d621 | \ jq -r .data.value | base64 -d | \ xargs -0 python3 -c 'import sys, yaml, json; j=json.loads(sys.argv[1]); print(yaml.safe_dump(j))'Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: ログレコード名を使用して、レコードから実行されたタスクのログ情報を取得します。ログレコード名を取得するには、レコード名の
recordsは、logsに置き換えます。以下のコマンドを実行します。opc results logs get --addr ${RESULTS_API} <log_record_name> | jq -r .data | base64 -d$ opc results logs get --addr ${RESULTS_API} <log_record_name> | jq -r .data | base64 -dCopy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドの例
opc results logs get --addr ${RESULTS_API} \ results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/logs/e9c736db-5665-441f-922f-7c1d65c9d621 | \ jq -r .data | base64 -d$ opc results logs get --addr ${RESULTS_API} \ results-testing/results/04e2fbf2-8653-405f-bc42-a262bcf02bed/logs/e9c736db-5665-441f-922f-7c1d65c9d621 | \ jq -r .data | base64 -dCopy to Clipboard Copied! Toggle word wrap Toggle overflow
1.3.3. 結果の検索 リンクのコピーリンクがクリップボードにコピーされました!
Common Expression Language (CEL) クエリーを使用して結果を検索できます。たとえば、成功しなかったパイプライン実行の結果を見つけることができます。ただし、関連情報のほとんどは結果オブジェクトには含まれていません。名前、完了時間、その他のデータで検索するには、レコードを検索します。
前提条件
-
opcユーティリティーをインストールし、Tekton Results をクエリーするための環境を準備している。
手順
次のコマンドを入力して、CEL クエリーを使用して結果を検索します。
opc results list --addr ${RESULTS_API} --filter="<cel_query>" <namespace-name>$ opc results list --addr ${RESULTS_API} --filter="<cel_query>" <namespace-name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
<namespace_name> は、パイプラインの実行またはタスクの実行が作成された namespace に置き換えます。
| 目的 | CEL クエリー |
|---|---|
| 失敗したすべての実行の結果 |
|
|
アノテーション |
|
1.3.4. レコードの検索 リンクのコピーリンクがクリップボードにコピーされました!
Common Expression Language (CEL) クエリーを使用してレコードを検索できます。各レコードにはパイプライン実行またはタスク実行に関する完全な YAML 情報が含まれるため、さまざまな基準でレコードを検索できます。
前提条件
-
opcユーティリティーをインストールし、Tekton Results をクエリーするための環境を準備している。
手順
次のコマンドを入力して、CEL クエリーを使用してレコードを検索します。
opc results records list --addr ${RESULTS_API} --filter="<cel_query>" <namespace_name>/result/-$ opc results records list --addr ${RESULTS_API} --filter="<cel_query>" <namespace_name>/result/-Copy to Clipboard Copied! Toggle word wrap Toggle overflow <namespace_name>は、パイプラインの実行またはタスクの実行が作成された namespace に置き換えます。または、次のコマンドを入力して、単一の結果内のレコードを検索します。opc results records list --addr ${RESULTS_API} --filter="<cel_query>" <result_name>$ opc results records list --addr ${RESULTS_API} --filter="<cel_query>" <result_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow <result_name>は、結果の完全名に置き換えます。
| 目的 | CEL クエリー |
|---|---|
| 失敗したすべてのタスク実行またはパイプライン実行のレコード |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 完了までに 5 分以上かかったすべてのパイプライン実行のレコード |
|
| 2023 年 10 月 7 日に完了したすべてのパイプライン実行とタスク実行のレコード |
|
| 3 つ以上のタスクを含むすべてのパイプライン実行のレコード |
|
|
|
|
|
|
|
1.3.5. 検索結果の参考情報 リンクのコピーリンクがクリップボードにコピーされました!
結果の共通表現言語 (CEL) クエリーでは次のフィールドを使用できます。
| CEL フィールド | 説明 |
|---|---|
|
|
|
|
| 結果の一意識別子。 |
|
|
|
|
| 結果の概要。 |
|
| 結果の作成時間。 |
|
| 結果の最終更新時刻。 |
summary.status フィールドを使用して、パイプラインの実行が成功したかどうかを判断できます。このフィールドには次の値を指定できます。
-
UNKNOWN -
SUCCESS -
FAILURE -
TIMEOUT -
CANCELLED
このフィールドの値を指定する場合は、" や ' などの引用符を使用しないでください。
1.3.6. レコード検索の参考情報 リンクのコピーリンクがクリップボードにコピーされました!
レコードの Common Expression Language (CEL) クエリーでは次のフィールドを使用できます。
| CEL フィールド | 説明 | 値 |
|---|---|---|
|
| レコード名 | |
|
| レコードタイプ識別子 |
|
|
| タスク実行またはパイプライン実行の YAML データ。ログレコードでは、このフィールドにはログ出力が含まれます。 |
data フィールドにはタスク実行またはパイプライン実行の YAML データ全体が含まれるため、このデータのすべての要素を CEL クエリーで使用できます。たとえば、data.status.completionTime には、タスク実行またはパイプライン実行の完了時間が含まれます。