Artifactory のログの収集
この手順では、ログを JFrog Artifactory から Sumo Logic に収集する方法について説明します。
ログ タイプ
Sumo Logic は、/var/opt/jfrog/artifactory/logs
ディレクトリのログを読み取ります。
artifactory.log
access.log
request.log
traffic.*.log
Artifactory ログの詳細については、JFrog の「Artifactory Log Files (Artifactory ログ ファイル)」を参照してください。
Collector の設定
Installed Collector を設定します。
Source の設定
このステップでは、次の表に示されている各ログ Source に対して 1 つずつローカル ファイル Source を設定します。ログ タイプに対してファイル Source を作成する場合には:
- Source の [File Path (ファイル パス)] には、次の表の「ファイル パス」列の値を使用してください。
- Source の [Source Category] に指定する値の末尾には、「Source Category」列に示されている接尾辞を付けてください。たとえば、Artifactory Server ログ Source の Source Category を
foo/artifactory/console
に設定することはできますが、artifactory/console/foo
には設定できません。
次の接尾辞が必要です。たとえば、_sourceCategory=<Foo>/artifactory/console を使用できますが、接尾辞の artifactory/console を使用する必要があります。
ログ Source | ファイル パス | Source Category |
Artifactory サーバ | /var/opt/jfrog/artifactory/logs/artifactory.log | artifactory/console |
アクセス | /var/opt/jfrog/artifactory/logs/access.log | artifactory/access |
Request | /var/opt/jfrog/artifactory/logs/request.log | artifactory/request |
Traffic (トラフィック) | /var/opt/jfrog/artifactory/logs/traffic.*.log | artifactory/traffic |
詳細な説明については、「ローカル ファイル Source」を参照してください。
- ローカル ファイル Source を設定します。
- 以下の Source フィールドを設定します。
- Name (名前): (必須) 名前は必須です。必要に応じて説明を入力します。
- Source Category: (必須)
- [Advanced (詳細)] セクションを設定します。
- Enable Timestamp Parsing (タイムスタンプ parse の有効化)。True
- Time Zone (タイム ゾーン): デフォルトではログは UTC で記録されます。
- Timestamp Format (タイムスタンプ形式)。自動検出。
- Encoding Type (エンコーディング タイプ): UTF-8
- Multi-line Parsing (複数行の parse): Detect Messages Spanning Multiple Lines (複数行にわたるメッセージを検出する)、Infer Boundaries (境界を推測する)
- [Save (保存)] をクリックします。
FER (Field Extraction Rules)
次に、さまざまな手法を使用する 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.
クエリのサンプル
経時的な Data Forwarding
_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