sansible.rsyslog
Rsyslog
この役割はログを送信するためにrsyslog v8をインストールします。
rsyslogに関する詳細はrsyslogドキュメントを参照してください。
インストールと依存関係
インストールするには、ansible-galaxy install sansible.rsyslog
を実行するか、次の内容をroles.yml
に追加してください。
- name: sansible.rsyslog
version: v3.0
その後、ansible-galaxy install -p ./roles -r roles.yml
を実行します。
タグ
この役割は2つのタグを使用します:build と configure
build
- Rsyslogとその依存関係をインストールします。
組み込みログ設定
Logstashにログファイルを送信するために、いくつかの組み込み設定が含まれています。これらは特定のログファイル形式用に設計されており、常にJSON形式で出力されます。各組み込みハンドラーの例設定は、defaults/main.ymlのbuiltin_configsの下にあります。
Syslogファイル
デフォルトで、syslogメッセージはJSON形式で送信されます。このための追加設定は必要ありません。
Syslogメッセージは次の形式で送信されます:
- type - 常にsyslog
- host - 発信元のホスト名
- timestamp - RFC-3339形式の日付
- version - JSONログでは常に2
- role - rsyslog役割設定のapp_nameフィールド
- message - ログ行自体
- priority - syslogの重要度番号
- program - メッセージを発信したサービス名
- facility - syslogのファシリティ
- severity - syslogの重要度名
{
"type": "syslog",
"host": "192.168.1.1",
"timestamp": "2017-10-21T14:29:30.739200+00:00",
"@version": "2",
"role": "some_application",
"message": "Something happened",
"priority": "3",
"program": "some-local-service",
"facility": "daemon",
"severity": "err"
}
認証ログファイル
sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_application_logs_enabled: true
認証とauthprivファシリティのメッセージを送信します。Syslogメッセージと同じテンプレートを使用し、typeフィールドはauthlogに設定されます:
{
"type": "authlog",
"host": "192.168.1.1",
"timestamp": "2018-01-09T10:45:01.117615+00:00",
"@version": "2",
"role": "some_application",
"message": " pam_unix(cron:session): session closed for user some_user",
"priority": "6",
"program": "CRON",
"facility": "authpriv",
"severity": "info"
}
プレーンテキストログファイル
sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_application_logs_enabled: true
sansible_rsyslog_builtin_configs_application_logs_logs:
- path: "/var/log/some_log.log"
options:
type: some_application_log
application_logs組み込みは、プレーンテキスト形式のログファイルを処理するために設計されています。これらのログファイルの行はそのままLogstashに送信され、次のJSON形式になります:
- type - ログファイル設定のtypeフィールド、Logstashフィルタに役立ちます
- host - 発信元のホスト名
- timestamp - RFC-3339形式の日付
- version - プレーンテキストログでは常に1
- role - rsyslog役割設定のapp_nameフィールド
- sourcefile - 行が取得されたログファイルの場所
- message - ログ行自体
例えば:
{
"type": "application_log",
"host": "192.168.1.1",
"timestamp": "2017-10-21T13:58:40.098660+00:00",
"@version": "1",
"role": "some_application_log",
"sourcefile": "/var/log/some_log.log",
"message": "A plain text log line"
}
JSONログファイル
sansible_rsyslog_app_name: some_application
sansible_rsyslog_builtin_configs_json_logs_enabled: true
sansible_rsyslog_builtin_configs_json_logs_logs:
- path: "/var/log/some_log.log"
options:
type: some_application_log
json_logs組み込みは、JSON形式のログファイルを処理するために設計されています。すべてのフィールドはJSON形式で送信され、いくつかの追加フィールドが追加されています:
- type - ログファイル設定のtypeフィールド、Logstashフィルタに役立ちます
- host - 発信元のホスト名
- version - JSONログでは常に2
- role - rsyslog役割設定のapp_nameフィールド
- sourcefile - 行が取得されたログファイルの場所
例えば、次のログ行があるとします:
{ "message": "Some log message", "datetime": "2017-01-01 00:00:00", "level": "info" }
これは次のように送信されます:
{
"type": "some_application_log",
"host": "192.168.1.1",
"@version": "2",
"role": "some_application",
"sourcefile": "/var/log/some_log.log",
"message": "Some log message",
"datetime": "2017-01-01 00:00:00",
"level": "info"
}
Nginxアクセスログファイル
nginx_access_logs組み込みは、json_logs組み込みと基本的に同じですが、typeフィールドはnginx-access-logsにハードコードされています。
NginxアクセスログをJSON形式で表示するには、nginx.confで次の設定を使用できます:
log_format main '{ '
'"http_host": "$http_host", '
'"clientip": "$remote_addr", '
'"datetime": "$time_iso8601", '
'"verb": "$request_method", '
'"request_full": "$request", '
'"response": "$status", '
'"response_length": "$body_bytes_sent", '
'"request_length": "$request_length", '
'"referrer": "$http_referer", '
'"agent": "$http_user_agent", '
'"request_time": "$request_time", '
'"upstream_time": "$upstream_response_time", '
'"user_id": "$http_x_user", '
'"request_id": "$http_x_request_id" '
'}';
access_log /var/log/nginx/access.log main;
Dockerコンテナログ
Dockerコンテナログ設定は、ECSコンテナインスタンスに追加することを目的としています。この設定は、ホスト上でunixソケットファイルを作成し、Dockerが実行中のコンテナから生成されたログを転送します。
プレーンテキストログ
sansible_rsyslog_builtin_configs_docker_application_logs_enabled: true
この設定は、/var/run/rsyslog/text.sockにソケットを作成します。アプリケーションのタスク定義内のログ設定は次のようにすべきです:
"LogConfiguration": {
"LogDriver": "syslog",
"Options": {
"tag": { "Ref": "ServiceName" },
"syslog-address": "unixgram:///var/run/docker/text.sock"
},
}
JSONログ
sansible_rsyslog_builtin_configs_docker_json_logs_enabled: true
この設定は、/var/run/rsyslog/json.sockにソケットを作成します。アプリケーションのタスク定義内のログ設定は次のようにすべきです:
"LogConfiguration": {
"LogDriver": "syslog",
"Options": {
"tag": { "Ref": "ServiceName" },
"syslog-address": "unixgram:///var/run/docker/json.sock"
},
}
Journaldを介したテキストまたはJSONログ
sansible_rsyslog_builtin_configs_docker_journald_logs_enabled: false
この設定は、journaldサービスに接続してリッスンします。これにより、コンテナのログファイルのみが処理され、journald内の他のすべてのログエントリは無視されます。コンテナからのJSONおよびテキスト出力の両方を処理できます。基本ログ記録のために、アプリケーションのタスク定義内のログ設定は次のようにすべきです:
"LogConfiguration": {
"LogDriver": "journald"
}
ECSデプロイメントでは、ログエントリのメタデータを拡張するために次のように設定できます:
sansible_rsyslog_custom_ecs_properties: yes
これを有効にした場合、アプリケーションのタスク定義内のログ設定は次のようにすべきです:
"LogConfiguration": {
"LogDriver": "journald",
"Log-Opts": {
"labels": "role,ecs_task_container,app_version"
}
}
例
インストールするには:
- name: Some app
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_app_name: default_app
sansible_rsyslog_builtin_configs_application_logs_enabled: true
sansible_rsyslog_builtin_configs_application_logs_logs:
- path: "/home/application_user/app_log.log"
sansible_rsyslog_builtin_configs_json_logs_enabled: true
sansible_rsyslog_builtin_configs_json_logs_logs:
- path: "/home/application_user/app_log_json.log"
options:
type_tag: "application_log"
sansible_rsyslog_builtin_configs_nginx_access_logs_enabled: true
sansible_rsyslog_builtin_configs_nginx_access_logs_logs:
- path: "/var/log/nginx/application_access.log"
設定ファイルにはグローバルデフォルト設定が適用されます。これらはvars/main.ymlで見れます。追加の設定を上書きしたり追加するには、sansible_rsyslog_config_global、sansible_rsyslog_config_imfile、sansible_rsyslog_config_main_queue、sansible_rsyslog_config_omfwdの変数を使用できます:
- name: Some app
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_app_name: default_app
sansible_rsyslog_builtin_configs_application_logs_enabled: true
sansible_rsyslog_builtin_configs_application_logs_logs:
- path: "/home/application_user/app_log.log"
sansible_rsyslog_builtin_configs_json_logs_enabled: true
sansible_rsyslog_builtin_configs_json_logs_logs:
- path: "/home/application_user/app_log_json.log"
options:
type_tag: "application_log"
sansible_rsyslog_builtin_configs_nginx_access_logs_enabled: true
sansible_rsyslog_builtin_configs_nginx_access_logs_logs:
- path: "/var/log/nginx/application_access.log"
sansible_rsyslog_config_global:
maxMessageSize: 32K
oversizemsg.input.mode: accept
sansible_rsyslog_config_imfile:
reopenOnTruncate: "on"
sansible_rsyslog_config_main_queue:
queue.size: 100000
sansible_rsyslog_config_omfwd:
action.resumeRetryCount: 10
デフォルト設定なしでインストールするには:
- name: Some app
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_app_name: default_app
sansible_rsyslog_default_config: no
特定のパッケージバージョンをインストールするには:
- name: Some app
hosts: "{{ hosts }}"
roles:
- role: sansible.rsyslog
sansible_rsyslog_version: "8.30*"
sansible_rsyslog_version_libfastjson4: "0.99.*"
sansible_rsyslog_version_mmjsonparse: "8.30.*"