JFrogのログ分析をPrometheusとGrafanaで

Kubernetes上でJFrog DevOps Platformを実行することは毎日何百万ものアーティファクトを開発者や顧客に提供することを意味しています。しかし、最高のパフォーマンスで運用するには、いくつかの重要な質問の回答が必要です。例えば最もリクエストの多いアーティファクトは何か?最も人気のあるリポジトリは何か?一番のヘビーユーザーは誰か?どのユーザーに問題があり、どのIPからアクセスされているのか?

これらの答えを知るためにJFrogから提供されている統合機能はJFrog Platformのアクティビティを監視するためのログ分析を提供し、開発の改善を行うための重要なフィードバックを提供することができます。 

K8sで運用している方は2018年にCloud Native Computing Foundation(CNCF)から登場して以来、デファクトのKubernetes監視ソリューションであるPrometheusを既に使用しているかもしれません。可視化ツールのGrafanaと一緒に使用することでアプリケーションやK8sクラスタ自体のパフォーマンス分析のためのセントラル・ダッシュボードを利用できます。

Prometheusベースのモニタリングを強化するためにJFrog log analytics solution for Prometheus and Grafanaを提供しています。この統合により、JFrogプラットフォームのログデータを収集し、運用上のメトリクスを調べて、すでに使用しているモニタリングツールで重要な洞察を得ることができます。

Prometheusが監視ツールとして最適でない場合はSplunkElasticDataDogを利用するためのソリューションも提供しています。

Fluentdのインストール

モニタリングおよびロギングの要となっているのはオープンソースのログコレクターであるFluentdです。Fluentdを使用することですべてのJFrogサービスに共通のロギングとモニタリングレイヤを提供することができます。Fluentdは各種プラットフォームにインストールできます。ご利用のプラットフォームのインストールガイドをご覧ください。

以下はRedHatにFluentdのtd-agentをインストールする手順です:

$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh

さらにPrometheus Fluentdプラグインをインストールする必要があります。このプラグインは、ロギングイベントをPrometheusのHTTPメトリクスインターフェースとして公開します。これについては後ほど説明します。

Fluentdの設定

Fluentdは入力ソース、フィルタ、出力の設定を行うテキスト設定ファイルで構成されています。Prometheus FluentdプラグインはPrometheus用のメトリクスを設定するための構文を提供します。それらはArtifactoryとXrayのログイベントをPrometheusのメトリクスに変換します。ArtifactoryとXray Fluentdの設定ファイルをこちらで提供しています。

適切なfluent.conf.*ファイルを選択し、td-agentを起動します。

  • fluent.conf.rt – Artifactory version 7 server
  • fluent.conf.rt6 – Artifactory version 6 server
  • fluent.conf.xray – Xray server
$ td-agent -c fluentd.config.rt

 

td-agentはポート番号24321/metricsでHTTPメトリクス・インターフェースを公開します。そのURLを指定した場合、以下のようなデータが表示されます。

Prometheusはこのインターフェースを定期的に「確認」し、これらのメトリクスを時間単位のデータストアに追加します。

Prometheus

今回の環境はPrometheus Kubernetes Operatorを使用してPrometheusをインストールしました。まだPrometheusがインストールされていない場合、Operatorを使ったPrometheusのインストール方法はこちらに記載されています。Prometheus Kubernetes Operatorを使用することで、Prometheusがサービスの新しいメトリクス・インターフェースを自動的に検出するServiceMonitorを設定することができます。それ以外の場合、Prometheusのドキュメントに記載されているようにYAML設定ファイルを使用することができます。以下のServiceMonitor リソース設定はKubernetesセレクタを使用して任意の新しいメトリクス・インターフェースを検出することができます。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
 name: servicemonitor-artifactory-ha-primary
 labels:
   metrics: jfrog
spec:
 selector:
   matchLabels:
     app: artifactory-ha-primary
 endpoints:
 - port: metrics
   interval: 15s

 

このセレクタはラベルapp: artifactory-haのようにメトリクス・インターフェース・サービスとマッチします。このサービスは上記の Fluentd Prometheusプラグインで設定したHTTPメトリクス・インターフェースを公開します。

apiVersion: v1
kind: Service
metadata:
 labels:
   app: artifactory-ha-member
 name: artifactory-member-ha-metrics
spec:
 ports:
 - name: metrics
   port: 24231
   protocol: TCP
 selector:
   role : unified-artifactory-ha-member

 

Prometheus Targetsリストでのメトリック・インターフェース・サービスの自動検出をさらに検証することができます。

これにより特に何百台ものサーバーを持つ大規模システムではPrometheusの設定を迅速かつ容易に行うことができます。

Grafana

Prometheusでメトリクスの収集が可能となったため、Prometheusの可視化レイヤである Grafanaを利用し、メトリクスを可視化できます。PrometheusのPromQLクエリ言語を使用し、ダッシュボード用のクエリを設定することができます。例えば以下のPromQLではリクエストされたトップリポジトリを取得できます。

topk(10, sum by (repo) (jfrog_rt_req{repo!=""}) )

 

そして次のバーゲージのウィジェットが表示可能となります。

Fluentdの設定ではArtifactoryとXrayのモニタリング・メトリクスがいくつか提供されており、これらのメトリクスをクエリして独自のダッシュボード・ウィジェットを作成することができます。まずはサンプルのダッシュボードを使用してください。このダッシュボードで、以下のグラフ・ウィジェットを提供しています。

  • Upload Data Transfers(アップロードされたデータ量)
  • Download Data Transfers(ダウンロードされたデータ量)
  • Top Downloading IPs(トップダウンロードIP)
  • Top Uploading IPs(トップアップロードIP)
  • Top Artifacts by Requests(リクエスト別トップアーティファクト)
  • Top Repos by Requests(リクエスト別トップリポジトリ)
  • Top Repos by Data(データ別トップリポジトリ)
  • Audit Users(監査ユーザー)
  • Artifactory User Access(Artifactoryユーザーアクセス)
  • Artifactory 5XX Status Codes(Artifactory 5XXステータスコード)
  • Artifactory Errors(Artifactoryエラー)
  • Xray 5XX Status Codes(Xray 5XXステータスコード)
  • Xray Errors(Xrayエラー)
  • Denied Login Attempts(ログイン試行拒否)
  • Denied Actions by IP(IP別アクション拒否)
  • Denied Actions by User(ユーザー別アクション拒否)

このダッシュボードをGrafanaにインポートし、使用中のすべてのメトリクスを表示します。

見て学ぶ

より詳細についてはJFrog Log Analytics GitHubをご確認ください。

データ重視の組織でJFrog Platformを使用している場合、顧客や開発者がバイナリ、DockerイメージHelm chartGoモジュール、Mavenなどをどのように使用しているかについての驚くべきデータソースを見逃している可能性があります。今すぐモニタリングを始めましょう。驚くような発見があるかもしれません。