Windows Server 2016 CloudWatch Agent の設定再利用でエラー

AWS,CloudWatch,EC2,WindowsServer

概要

  • Windows Server では、CloudWatch Agentをインストールしてエージェント(統合 CloudWatch エージェント)を設定することで、EC2 のメトリクス監視やイベントログをCloudWatch Logs に転送することが可能となります。
  • 今回は、以前ご紹介した下記の方法で準備したCloudWatch Agentの設定ファイルを別のサーバーで再利用した際にエラーとなった事例をご紹介します。
 

ハマったこと

Invalid json format, please check. Reason: invalid character ‘i’ looking for beginning of value

  • 過去の記事でご紹介する設定ファイルのサンプルとエージェントの起動方法を使用して、別のサーバーで再利用した際にエラーとなりました。以前は、Windows Server 2012 R2 にて実績がありましたが、今回はWindows Server 2016 となります。
  • PowerShell で出力されたエラーは、「Invalid json format, please check. Reason: invalid character 'i’ looking for beginning of value」となります。過去の経験より、設定ファイルの記述に問題があると推測しました。
  • 一見するとサービスは起動していますが、設定ファイルはdefaultから作られてしまい、こちらで配置したconfig.json が読み込まれてはいません。
  • 他にハマるポイントとしては、"files"でローカルのファイルをCloudWatch Logsに出力する際に、\(yenマーク)をエスケープのため\ を2つ付けます。\ が1つの場合にもPowerShell でエラーとなるため、注意です。
 

Windows PowerShell
Copyright (C) 2016 Microsoft Corporation. All rights reserved.
PS C:\Windows\system32> cd "C:\Program Files\Amazon\AmazonCloudWatchAgent"
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> ./amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -m ec2 -c file:config.json
Successfully fetched the config and saved in C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\file_config.json.tmp
Start configuration validation...
2019/09/25 16:13:37 Reading json config file path: C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\file_config.json.tmp ...
2019/09/25 16:13:37 Invalid json format, please check. Reason: invalid character 'i' looking for beginning of value
2019/09/25 16:13:37 I! AmazonCloudWatchAgent Version 1.227496.0.
2019/09/25 16:13:37 Configuration validation first phase failed. Agent version: 1.227496.0. Verify the JSON input is only using features supported by this version.
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> ./amazon-cloudwatch-agent-ctl.ps1 -a start
amazon-cloudwatch-agent is not configured. Applying default configuration before starting it.
Successfully fetched the config and saved in C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\default.tmp
Start configuration validation...
2019/09/25 16:14:52 Reading json config file path: C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\default.tmp ...
Valid Json input schema.
No csm configuration found.
No log configuration found.
Configuration validation first phase succeeded
Configuration validation second phase succeeded
Configuration validation succeeded
 

解決方法

やったこと

  • 設定ファイルの記述に問題があることを疑い、過去の記事でもご紹介したウィザードを使った方法で設定ファイルを再作成します。
  • ウィザードによって再作成した設定ファイルは一部記述が変わり、次回はエージェントの起動が成功することを確認しました。

PS C:\Program Files\Amazon\AmazonCloudWatchAgent> ./amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -m ec2 -c file:config.json
Successfully fetched the config and saved in C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\file_config.json.tmp
Start configuration validation...
2019/09/25 16:50:16 Reading json config file path: C:\ProgramData\Amazon\AmazonCloudWatchAgent\Configs\file_config.json.tmp ...
Valid Json input schema.
No csm configuration found.
No metric configuration found.
Configuration validation first phase succeeded
Configuration validation second phase succeeded
Configuration validation succeeded
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> ./amazon-cloudwatch-agent-ctl.ps1 -a start
PS C:\Program Files\Amazon\AmazonCloudWatchAgent> ./amazon-cloudwatch-agent-ctl.ps1 -a status
{
  "status": "running",
  "starttime": "2019-09-25T16:50:30",
  "version": "1.227496.0"
}
PS C:\Program Files\Amazon\AmazonCloudWatchAgent>
 

設定ファイルのサンプル

  • 以下に再作成したOK例、以前の再利用でNGだった例のサンプルを貼り付けます。event_formatなどパラメータ増えています。詳しく調べていませんが、必須のパラメータが増えたのかもしれません。

【OK例】
{
    "agent": {
        "metrics_collection_interval": 60,
        "logfile": "C:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\amazon-cloudwatch-agent.log"
    },
    "logs": {
        "logs_collected": {
            "windows_events": {
                "collect_list": [
                {
                    "event_name": "System",
                    "event_levels": [
                        "INFORMATION",
                        "WARNING",
                        "ERROR"
                    ],
                    "log_group_name": "Windows_SystemEventLog",
                    "log_stream_name": "{local_hostname}"
                },
                {
                    "event_name": "Security",
                    "event_levels": [
                        "INFORMATION",
                        "WARNING",
                        "ERROR"
                    ],
                    "log_group_name": "Windows_SecurityEventLog",
                    "log_stream_name": "{local_hostname}"
                },
                {
                    "event_name": "Application",
                    "event_levels": [
                        "INFORMATION",
                        "WARNING",
                        "ERROR"
                    ],
                    "log_group_name": "Windows_ApplicationEventLog",
                    "log_stream_name": "{local_hostname}"
                }
                ]
            }
        }
    }
}
 

【NG例】
{
    "logs": {
        "logs_collected": {
            "windows_events": {
                "collect_list": [
                    {
                        "event_format": "text",
                        "event_levels": [
                            "INFORMATION",
                            "WARNING",
                            "ERROR",
                            "CRITICAL"
                        ],
                        "event_name": "System",
                        "log_group_name": "Windows_SystemEventLog",
                        "log_stream_name": "{local_hostname}"
                    },
                    {
                        "event_format": "text",
                        "event_levels": [
                            "INFORMATION",
                            "WARNING",
                            "ERROR",
                            "CRITICAL"
                        ],
                        "event_name": "Security",
                        "log_group_name": "Windows_SecurityEventLog",
                        "log_stream_name": "{local_hostname}"
                    },
                    {
                        "event_format": "text",
                        "event_levels": [
                            "INFORMATION",
                            "WARNING",
                            "ERROR",
                            "CRITICAL"
                        ],
                        "event_name": "Application",
                        "log_group_name": "Windows_ApplicationEventLog",
                        "log_stream_name": "{local_hostname}"
                    }
                ]
            }
        }
    }
}