メインコンテンツまでスキップ
Sumo Logic Japanese

Puppet のログの収集

Puppet 用の Sumo Logic アプリケーションのログを収集します。

このページでは、Puppet 用 Sumo アプリケーションの Puppet ログ、レポート、イベントの収集手順を説明します。 

プロセス概要

次のセクションでは、Puppet Master ホストへのコレクタのインストール、Sumo Puppet ソース (サーバ、アクセス、レポート ログ) のセットアップ、Puppet 用 Sumo アプリケーションのインストール手順を提示します。この設定を使用して、Puppet ログ、イベント、レポートを収集し、アプリケーションが提供するダッシュボードでリソース パフォーマンスと Puppet 実行を視覚化できます。 

ステップ 1: アクセス キーの作成

「アクセス キー」の手順に従って、Sumo アクセス ID とキーを作成します。次のステップで Puppet Master ホストにコレクタをセットアップするときに使用します。 

ステップ 2: Puppet Master へのコレクタのインストール

このステップでは、Puppet Master ホストにコレクタをインストールします。「Linux へのコレクタのインストール」の手順に従います。

ステップ 3: Puppet サーバ ログ用ローカル ファイル ソースの設定

このステップでは、ステップ 2 で作成したインストール済みコレクタに、ローカル ファイル ソースを追加します。ローカル ファイル ソースは Puppet サーバ ログを受信します。  

「ローカル ファイル ソース」のステップと、次の追加の手順に従います。

  • [File Path (ファイル パス)] に Puppet サーバ ログ ファイル パスを入力します。デフォルトの Puppet サーバ ログ ファイルは次のとおりです。
    /var/log/puppetlabs/puppetserver/puppetserver.log
    Puppet サーバ ログが別の場所にある場合、正しいパスを入力します。  
  • [Source Category (ソース カテゴリ)] には、次のように値を入力します。
    prod/web/puppet/server
  • [Advanced Options (詳細オプション)] でデフォルト値を許可します。

ステップ 4: Puppet サーバ アクセス ログ用ローカル ファイル ソースの設定

このステップでは、ステップ 2 で作成したインストール済みコレクタに、別のローカル ファイル ソースを追加します。ローカル ファイル ソースは Puppet サーバ アクセス ログを受信します。

「ローカル ファイル ソース」のステップと、次の追加の手順に従います。

  • [File Path (ファイル パス)] に Puppet サーバ ログ ファイル パスを入力します。デフォルトの Puppet サーバ アクセス ログ ファイルは次のとおりです。
    /var/log/puppetlabs/puppetserver/puppetserver-access.log
    Puppet サーバ アクセス ログが別の場所にある場合、正しいパスを入力します。  
  • [Source Category (ソース カテゴリ)] には、次のように値を入力します。 
    prod/web/puppet/access
  • [Advanced Options (詳細オプション)] でデフォルト値を許可します。

ステップ 5: Puppet レポート スクリプト ソースの設定

Puppet レポートは YAML フォーマットを使用しています。これらは JSON フォーマットに変換してから、Sumo で取得する必要があります。 

このセクションでは、Sumo コレクタの取得用にYAML ファイルを JSON に変換するシェル スクリプトを実行する、スクリプト ソースのセットアップ手順を紹介します。代替方法として、サードパーティ ツールでYAML ファイルを変換し、指定するディレクトリから JSON を取得するようにインストール済みコレクションのローカル ファイル ソースを設定することもできます。  

スクリプト ソースの前提条件

次の前提条件が、スクリプト ソースに適用されます。

  • コレクタ プロセスを実行するユーザは、Puppet レポート ディレクトリへの読み込みおよび書き込みアクセス権を持っている必要があります。 
  • コレクタは、コレクタ プロセスを実行するユーザとして、スクリプトを実行します。スクリプトは、マシンの stdout または stderror 出力ストリームにデータを出力し、収集されるようにします。詳細については、「スクリプト ソース」を参照してください。 
  • スクリプトを実行するマシンには、Ruby がインストールされている必要があります。
  • スクリプトは、問題のケースで確認できる設定済みの作業ディレクトリにログを生成します。 

詳細については、「スクリプト ソース」を参照してください。 

スクリプト ソースをセットアップする手順

  1. Sumo Web アプリケーションで、[Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)] を選択します。
  2. Puppet Master ホストにインストールされたコレクタに移動して、[Add (追加)] > [Add Source (ソースの追加)] を選択します。
  3. [Script (スクリプト)] を選択します。[Script (スクリプト)] ページが表示されます。
  4. Name (名前)。(必須)。
  5. Description (説明)。(省略可能)。
  6. Source Host (ソース ホスト): ソース ホストのホスト名または IP アドレスを入力します。ホスト名は最大 128 文字です。 
  7. Source Category (ソース カテゴリ)。(必須) 次のように値を入力します。
    prod/web/puppet/reports 
  8. Frequency (頻度)。デフォルトは 15 分です。
  9. Command (コマンド): デフォルト値、/bin/sh, が選択された状態のままにします。 
  10. Script (スクリプト): [Type the script to execute (実行するスクリプトを入力)] を選択して、テキスト ボックスに次のスクリプトを貼り付けます。

    MaxFileSize=20 log_file_name=puppet_rpt_conversion.log #Get size in bytes** file_size=`du -b puppet_rpt_conversion.log | tr -s '\t' ' ' | cut -d' ' -f1` file_size=$(($file_size/1048576)) if [ $file_size -gt "$MaxFileSize" ];then timestamp=`date +%s` mv puppet_rpt_conversion.log puppet_rpt_conversion.log.$timestamp fi echo "YAML to JSON conversion started!!">> "$log_file_name" echo "Start Time: $(date)" >> "$log_file_name" if [ ! -e last_run_date.tmp ] then date "+%Y-%m-%d" --date=1970-01-01 > last_run_date.tmp; fi find .-maxdepth 2 -type f -name "*.yaml" -newermt "$(cat last_run_date.tmp)" | while read f; do if [ -s "$f" ] then sed 1d "$f" > tmpfile; ruby -rjson -ryaml -e "resource_list = '' json = JSON.generate({});data = JSON.parse(json); obj = JSON.parse(YAML.load_file('tmpfile').to_json); data['host'] = obj['host']; data['time'] = obj['time']; data['configuration_version'] = obj['configuration_version']; data['transaction_uuid'] = obj['transaction_uuid']; data['report_format'] = obj['report_format']; data['puppet_version'] = obj['puppet_version']; data['status'] = obj['status']; data['transaction_completed'] = obj['transaction_completed']; data['noop'] = obj['noop']; data['noop_pending'] = obj['noop_pending']; data['environment'] = obj['environment']; data['metrics'] = obj['metrics']; data['resource_list'] = resource_list; i = 0; obj['resource_statuses'].each{ |j| if i == 0 then tempdata = j[0]; else tempdata = ',' + j[0]; end data['resource_list'] << tempdata; i = i + 1; }; puts data.to_json; obj['resource_statuses'].each{ |y| logsres = y[1]; logsres['transaction_uuid'] = obj['transaction_uuid']; logsres['environment'] = obj['environment']; logsres['host'] = obj['host']; puts logsres.to_json; }; obj['logs'].each { |x|logsjson = x; logsjson['host'] = obj['host']; logsjson['transaction_uuid'] = obj['transaction_uuid']; logsjson['environment'] = obj['environment']; puts logsjson.to_json };" echo "$f conversion status:"$? >> "$log_file_name" date "+%d-%b-%Y %H:%M:%S" > last_run_date.tmp fi done echo "Conversion Completed.End Time: $(date)" >> "$log_file_name"
  11. Working Directory (作業ディレクトリ)。デフォルト Puppet レポート ディレクトリ: 
    /opt/puppetlabs/server/data/puppetserver/reports 
    Puppet が別の場所にインストールされている場合、正しいパスを入力します。
  12. [Advanced options (詳細オプション)] を設定します。
    1. Enable Timestamp Parsing (タイムスタンプ パースの有効化)。デフォルトでは、このオプションはオンになっています。
    2. Time Zone (タイムゾーン)。デフォルトは、[Use time zone from log file (ログ ファイルのタイム ゾーンを使用)] です。
    3. Timestamp Format (タイムスタンプ フォーマット)[Specify a format (フォーマットを指定)] をクリックします。
      1. Format (形式)。以下を入力します。
         yyyy-MM-dd'T'HH:mm:ss.SSS'Z'
      2. Timestamp locator (タイムスタンプ ロケータ)。以下を入力します。
        "time":"(.*?)"
    4. Enable Multiline Processing (複数行の処理の有効化)。 
      1. Detect messages spanning multiple lines (複数行メッセージの検出)。デフォルトでは、このオプションはオンになっています。
      2. Infer Boundaries (境界の推定): デフォルトでは、このオプションはオンになっています。
      3. Boundary Regex (境界正規表現): 複数行処理が有効で、[Infer Boundaries (境界の推定)] が無効な場合は、メッセージ境界用の正規表現を入力します。
    5. Processing Rules (処理ルール)。  目的に応じて、処理ルールを設定します。詳細については、「処理ルール」を参照してください。

Puppet ログとレポートが Sumo Logic に流入するようになります。

スクリプト ソースのトラブルシューティング

問題が発生した場合:

ログ メッセージのサンプル

Puppet サーバ

2018-08-22 00:03:14,141 INFO  [qtp839286351-63] [puppetserver] Puppet Compiled catalog for puppet-node-1 in environment production in 0.18 seconds
2018-08-22 00:19:33,594 ERROR [qtp839286351-62] [puppetserver] Puppet Could not find node statement with name 'default' or 'puppet-node-2' on node puppet-node-2

Puppet アクセス

54.90.112.107 - - [28/Aug/2018:06:42:49 +0000] "PUT /puppet/v3/report/puppet-node-1?environment=production& HTTP/1.1" 200 9 "-" "Puppet/5.5.3 Ruby/2.4.4-p296 (x64-mingw32)" 134
10.1.3.83 - - [28/Aug/2018:06:44:18 +0000] "GET /puppet/v3/node/puppet-node-3?environment=production&configured_environment=production&transaction_uuid=f95ce8bd-f97e-4d99-9a72-3b010a50ceb1&fail_on_404=true HTTP/1.1" 200 11394 "-" "Puppet/5.5.3 Ruby/2.4.4-p296 (x86_64-linux)" 77

Puppet レポート

Puppet レポートは YAML フォーマットを使用しています。これらは JSON に変換してから、Sumo で取得する必要があります。 

これは YAML フォーマットの Puppet レポートの一部です。

-- !ruby/object:Puppet::Transaction::Report
host: puppet-node-1
time: '2018-08-28T03:25:05.628370065Z'
configuration_version: 1535426713
transaction_uuid: 8a3bb8e5-c5ec-44a2-a3a4-45aed3ae13e9
report_format: 6
puppet_version: 4.10.12
status: unchanged
transaction_completed:
noop: false
noop_pending: false
environment: production
logs:
- level: notice
  message: Applied catalog in 2.03 seconds
  source: Puppet
  tags:
  - notice
  time: '2018-08-28T03:25:17.345922191Z'
  file:
  line:
metrics:
  resources:
    name: resources
    label: Resources
    values:
    - - total
      - Total

 
これは JSON フォーマットの Puppet レポートの一部です。 
 
{"host":"puppet-node-1","time":"2018-08-14T22:22:50.931239059Z","configuration_version":1534247572,"transaction_uuid":"43b51400-e009-4e5e-b856-1dff5dae9c64","report_format":10,"puppet_version":"5.5.3","status":"unchanged","transaction_completed":true,"noop":false,"noop_pending":false,"environment":"production","logs":[{"level":"err","message":"Could not retrieve catalog from remote server: Error 500 on SERVER: Server Error: Syntax error at '}' (file: /etc/puppetlabs/code/environments/production/modules/sumo/manifests/nix_config.pp, line: 185, column: 1) on node puppet-node-1","source":"Puppet","tags":["err"],"time":"2018-08-14T22:22:52.910348336Z","file":null,"line":null},{"level":"notice","message":"Applied catalog in 0.05 seconds","source":"Puppet","tags":["notice"],"time":"2018-08-14T22:22:53.024015171Z","file":null,"line":null}],"metrics":{"resources":{"name":"resources","label":"Resources","values":[["total","Total",10],["skipped","Skipped",0],["failed","Fail

クエリのサンプル

失敗したリソース

_sourceCategory=prod/web/puppet/reports
| parse "\"resources\":{\"name\":\"resources\",\"label\":\"Resources\",\"values\":[[\"total\",\"Total\",*],[\"skipped\",\"Skipped\",*],[\"failed\",\"Failed\",*],[\"failed_to_restart\",\"Failed to restart\",*],[\"restarted\",\"Restarted\",*],[\"changed\",\"Changed\",*],[\"out_of_sync\",\"Out of sync\",*],[\"scheduled\",\"Scheduled\",*],[\"corrective_change\",\"Corrective change\",*]]" as total_res,skipped,failed,failed_to_restart,restarted,changed,out_of_sync,scheduled,corrective_change
| sum(total_res) as total_resources, sum(failed) as failed_resources
| failed_resources/total_resources*100 as failed_res_pct
| fields failed_res_pct

 

  • この記事は役に立ちましたか?