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

Puppet のログの収集

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

プロセス概要

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

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

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

ステップ 2: Puppet Master への Collector のインストール

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

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

このステップでは、ステップ 2 で作成した Installed Collector に、ローカル ファイル Source を追加します。ローカル ファイル Source は Puppet サーバ ログを受信します。  

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

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

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

このステップでは、ステップ 2 で作成した Installed Collector に、別のローカル ファイル Source を追加します。ローカル ファイル Source は Puppet サーバ アクセス ログを受信します。

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

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

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

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

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

スクリプト Source の前提条件

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

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

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

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

  1. Sumo Web アプリケーションで、[Manage Data (データの管理)] > [Collection (コレクション)] > [Collection (コレクション)] を選択します。
  2. Puppet Master ホストにインストールされた Collector に移動して、[Add (追加)] > [Add Source (Source の追加)] を選択します。
  3. [Script (スクリプト)] を選択します。バージョン 19.245-4 以降の新しい Collector では、スクリプト Source の作成はデフォルトでは禁止されています。スクリプト Source を許可するには、user.properties 内の Collector のパラメータ enableScriptSource を true に設定する必要があります。
  4. Name (名前): (必須)。
  5. Description (説明): (省略可能)。
  6. Source Host (Source ホスト): Source ホストのホスト名または 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 (タイムスタンプ parse の有効化)。デフォルトでは、このオプションはオンになっています。
    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 に流入するようになります。

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

問題が発生した場合:

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

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

 

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