JFrogのログ分析をElasticで

 

DevOpsチームはユニバーサル・バイナリ・リポジトリマネージャーとしてArtifactoryを利用していますが、その運用監視は困難な場合があります。複数の高可用性ノードとXrayをJFrog DevOpsプラットフォームとして統合することで運用データはJFrogプラットフォームの各サービスのログに分散されます。

運用チームはリアルタイムのデータマイニングとプラットフォーム監視で得られる貴重なデータの分析を必要としています。以前のブログJFrogのログ分析をSplunkでにて初めてご覧になった方もいるかもしれません。

この機能をより広範囲に利用できるようにするため、JFrogはこの機能をElastic Stackのユーザーに拡張し、ElasticsearchとKibanaの統合を行いました。

Elasticsearchは分散型でスケーラブルな検索エンジンで全文検索、構造化テキスト検索、アナリティクス検索などに利用できます。大量のデータを検索する場合はもちろん、さまざまな種類の文書を検索する場合にも利用されています。

KibanaはElasticsearchの可視化とダッシュボードとして一般的に導入されています。Kibanaを使用した場合、ビルドの可視化やダッシュボードを使ってWeb UIからElasticsearchのログデータを検索することができます。

オープンソースのログ分析テクノロジーを活用する方法をご紹介します。Elastic、Fluentd、Kibanaを活用し、運用チームが価値ある情報を得るための無償のオープンソース・ログ分析プラットフォームを提供します。

Fluentdの使用

まず、JFrog上のオープンソースのデータコレクタであるFluentdをElasticsearchとKibanaの統合で利用できるようにしました。FluentdはJFrogプラットフォームの各製品に対するログ入力、フィールドの抽出、レコードの変換を行い、このデータをJSONに変換します。

すべてのログデータを共通フォーマットで利用できるため、Fluentdはプラグインを介して、お客様が選択したElasticsearchにログデータを送信します。

Fluentdのインストール

各JPDノードにFluentdロギングエージェントをインストールする必要があります。このエージェントは様々なJPDログファイルを処理し、新しいログ行を解析後、対応するレコードに変換し、Fluentdの関連する出力プラグインに送信する役割を持っています。

各ノードにFluentdエージェントをインストールするにはFluentdインストールガイドに記載されている通り、OSの種類に応じた手順を実施します。

例えばRed Hat UBI Linuxを動作させているノードではFluentdエージェント 「td-agent」をインストールする必要があります(このOSではrootアクセスが必要です):

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

Red Hat UBIのuser-spaceにインストールする場合はFluentdのRubyとGemをインストールします:

$ curl -O  | tar -xvf

Fluentdの設定

rootユーザかそれ以外のユーザかにより、Fluentd設定ファイルの配置場所の変更を必要な場合があります。

パッケージマネージャを使用した場合、rootユーザによるインストールではデフォルトでtd-agent.confファイルは /etc/td-agent/にあります。

$ ls -al /etc/td-agent/td-agent.conf 
-rw-r--r-- 1 root root 8017 May 11 18:09 /etc/td-agent/td-agent.conf

rootユーザ以外のインストールでは書き込み権限があればtd-agent.confファイルをどこでも保存できます。td-agentを実行時、-cフラグを利用してfluentdをこのファイルの場所に指定することができます。

設定ファイルはJFrog log analytics Github repoから取得した設定ファイルに置き換える必要があります。

このリポジトリではfluentdフォルダに設定ファイルのテンプレートが含まれています。ノードで実行されているJFrogアプリケーションにマッチするテンプレートを使用してください:

この設定ファイル内のElasticsearchインスタンスのホストとポートをmatchディレクティブで更新する必要があります:

#ELASTIC OUTPUT
  @type elasticsearch
  @id elasticsearch
  host elasticsearch
  port 9200
  index_name unified-artifactory
  include_tag_key true
  type_name fluentd
  logstash_format false
#END ELASTIC OUTPUT

ここでのホストはデプロイしたkibana_svc.yamlスニペットの仕様上、内部のK8sクラスタ・ホストのelasticsearchです。ElasticsearchとKibanaを別の方法で設定している場合は外部IPアドレスを設定することも可能です。

Fluentdの実行

新しい設定ファイルを設定後にコンテナにログインし、Pod上のサービスとしてtd-agentを起動することができます:

$ systemctl start td-agent

非rootユーザによるインストールの場合はtd-agentに設定ファイルを指定して実行することができます:

$ td-agent -c td-agent.conf

これでFluentdのログ・エージェントが起動し、JPDのログをtailしてElasticsearchに送信します。

ArtifactoryとXrayを実行しているすべてのKubernetes Podに対して、これらの手順を繰り返す必要があります。

ElasticsearchとKibanaの利用

Elasticsearchのインストールと設定Kibanaのセットアップが未完了の場合は今すぐ実施してください。また、ElasticsearchとKibanaをKubernetesにデプロイする際の手順とYAMLファイルも提供しています。

KibanaのIndex ManagementページからFluentdのインストールと各ArtifactoryとXray Podでtd-agentが実行されている状態とインデックスが生成されていることが確認できます。

Elasticsearch/Kibana用のJFrog統合ではIndex PatternsとVisualizationsを定義するNDJSONファイルを提供しています。このファイルはKibana Saved Objectsページからインポートすることができます。

Index Patterns、Visualizations、Dashboards、Widgets、Saved Searchesがインポートされていることが確認できます。

Index Patternsではunified-artifactoryパターン用に2つのScripted fieldsがあります。

これはrequest_content_lengthresponse_content_lengthをGBに変換しているからです。生成されているログはDiscoverセクションで見ることができます。

最後にData Widgets全体に表示される情報を含むDashboardを表示し、JFrog Unified Platformをリアルタイムで監視できるようにします。

インストール後、JFrog Logsダッシュボードに主要な動作メトリクスのタイムラインとカウントデータが表示されます:

  • Log volumes, which can be filtered by type(タイプでフィルター可能なログ・ボリューム)
  • Service errors(サービスエラー)
  • HTTP response codes(HTTPレスポンスコード)
  • Accessed image(アクセスされたイメージ)
  • Accessed repositories(アクセスされたリポジトリ)
  • Data transfers in GB for uploads/downloads(アップロード/ダウンロードされたデータ量(GB))
  • Top 10 IPs for upload/download(アップロード/ダウンロードが多い上位10件のIPアドレス)
  • Audit actions by username(ユーザー毎の監査アクション)
  • Denied actions and logins by IP and username(IPとユーザー毎の拒否されたアクションとログイン)
  • Accepted deploys by username(ユーザー毎の許可されたデプロイ)

素晴らしいものが統合される時

これですべてのサービスと実行ノードに渡り、JFrog Platform Deploymentを監視するツールプラットフォームが構築されて運用に関する貴重なデータの分析ができるようになりました。

JFrogプラットフォームを使用する方法やその他の最良の方法について、さらに詳しく知りたい場合はバーチャルSwampUp 2020カンファレンスに登録することでArtifactory、Xray、Distribution、Pipelinesに関するオンライントレーニングや詳細なセッションに参加できます。