Artifactory のログの収集
この手順では、ログを JFrog Artifactory から Sumo Logic に収集する方法について説明します。
ログ タイプ
Sumo Logic は、/var/opt/jfrog/artifactory/logs
ディレクトリのログを読み取ります。
- Artifactory サーバ (
artifactory.log
) - アクセス (
access.log
) - リクエスト (
request.log
) - トラフィック (
traffic.*.log
)
Artifactory ログの詳細については、JFrog の 「Artifactory Log Files (Artifactory ログ ファイル)」を参照してください。
コレクタの設定
インストール済みコレクタを設定します。
ソースの設定
- ローカル ファイル ソースを設定します。
- 以下のソース フィールドを設定します。
- Name (名前)。(必須) 名前は必須です。必要に応じて説明を入力します。
- Source Category (ソース カテゴリ)。(必須) [Source Category (ソース カテゴリ)] メタデータ フィールドは、ソースを整理してラベル付けするための基本的な構成要素です。Artifactory アプリケーションと連携するには末尾が「artifactory/console」である必要があります。例:
_sourceCategory=<Foo>/artifactory/console
。カテゴリの命名については、「ベスト プラクティス」を参照してください。
- [Advanced (詳細)] セクションを設定します。
- Enable Timestamp Parsing (タイムスタンプ パースの有効化)。true
- Time Zone (タイムゾーン)。デフォルトではログは UTC で記録されます。
- Timestamp Format (タイムスタンプ フォーマット)。自動検出。
- Encoding Type (エンコーディング タイプ): UTF-8
- Multi-line Parsing (複数行のパース): Detect Messages Spanning Multiple Lines (複数行にわたるメッセージを検出する)、Infer Boundaries (境界を推測する)
- [Save (保存)] をクリックします。
コレクタをインストールして、ソースを設定するときに、次のソース カテゴリを設定して、ログを収集しダッシュボードの内容を作成します。
次の接尾辞が必要です。たとえば、_sourceCategory=<Foo>/artifactory/console を使用できますが、接尾辞の artifactory/console を使用する必要があります。
ログ | ロケーション | ソース カテゴリ |
Artifactory サーバ | /var/opt/jfrog/artifactory/logs/artifactory.log | _sourceCategory=artifactory/console |
アクセス | /var/opt/jfrog/artifactory/logs/access.log | _sourceCategory=artifactory/access |
Request | /var/opt/jfrog/artifactory/logs/request.log | _sourceCategory=artifactory/request |
Traffic (トラフィック) | /var/opt/jfrog/artifactory/logs/traffic.*.log | _sourceCategory=artifactory/traffic |
フィールド抽出ルール
次に、さまざまな手法を使用する Artifactory 抽出ルールを紹介します。
Traffic (トラフィック)
_sourceCategory=*artifactory*
| where _sourceCategory matches "*artifactory/traffic"
| parse regex "(?<year>\d{4})(?<month>\d{2})(?<day>\d{2})(?<hour>\d{2})(?<minute>\d{2})(?<second>\d{2})\|\d*\|(?<direction>[^|]*)\|\s*(?<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|[^|]*)\|(?<repo>[^:]*):(?<fullfilepath>[^|]*)\|(?<size>\d*)" nodrop
アクセス ログ
_sourceCategory=*artifactory*
| where _sourceCategory matches "*artifactory/access"
| parse "[*] *:* for */*" as what, repo, path, user, ip
リクエスト ログ
_sourceCategory=*artifactory*
| where _sourceCategory matches "*artifactory/request"
| parse "*|*|*|*|*|*|*|*|*|*" as datetime, response_time, type, ip, user, method, path, protocol, status_code, size
ログ メッセージのサンプル
20170113185444|17|REQUEST|1.1.1.1|anonymous|GET|/cloudera-repos/org/slf4j/slf4j-log4j12/1.7.5/slf4j-log4j12-1.7.5.jar|HTTP/1.1|200|8869
20170113185444|0|DOWNLOAD|1.1.1.1|cloudera-repos:org/apache/spark/spark-catalyst_2.11/2.0.1/spark-catalyst_2.11-2.0.1.jar.sha1|40
2017-01-13 18:54:12,121 [ACCEPTED DEPLOY] pypi-remote-cache:.pypi/test.html for billythekid/1.1.1.1.
クエリのサンプル
経時的なデータ転送
_sourceCategory=*artifactory*
| where _sourceCategory matches "*artifactory/traffic"
| parse regex
"(?<year>\d{4})(?<month>\d{2})(?<day>\d{2})(?<hour>\d{2})(?<minute>\d{2})(?<second>\d{2})\|\d*\|(?<direction>[^|]*)\|\s*(?<ip>\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}|[^|]*)\|(?<repo>[^:]*):(?<fullfilepath>[^|]*)\|(?<size>\d*)" nodrop
| timeslice 1h
| sum(size) by _timeslice, direction
| _sum / (1024 * 1024 * 1024) as sizeinGB | sort by _sum
| fields -_sum
| transpose row _timeslice column direction
ステータス コード別のリクエスト (10 分ごと)
_sourcecategory=*artifactory*
| where _sourceCategory matches "*artifactory/request"
| parse "*|*|*|*|*|*|*|*|*|*" as datetime, response_time, type, ip, user, method, path, protocol, status_code, size
| timeslice 10m
| count _timeslice, status_code | sort by _count
| transpose row _timeslice column status_code
一意なパスの受け入れ済みデプロイ
_sourceCategory=*artifactory* "ACCEPTED DEPLOY" "-cache"
| where _sourceCategory matches "*artifactory/access"
| parse "[*] *:* for */*" as what, repo, path, user, ip
| parse regex field=ip "(?<ip>.*)\."
| where what = "ACCEPTED DEPLOY" and repo matches "*-cache"
| timeslice 10m
| count_distinct(path) as paths by _timeslice
| outlier paths