/os2cw

Push disk and memory metrics to cloudwatch.

Primary LanguageGoMIT LicenseMIT

os2cw

CircleCI Go Report Card

Push disk and memory metrics to cloudwatch from Linux, Windows, and Mac.

Installing/Building

The easiest way to build the binaries is to run make on-docker. This uses a docker build container to build the application and only requires that you have docker running on your local system. No dev environment needed.

If you have Go installed on your system, simply run make.

Everything is outputted into the build/ dirctory locally.

Deployment

Simply copy the executable to the system and run.

Running

os2cw send mem-free mem-used vol-free vol-used -v all

Configuration

Configuration is handled either via command-line arguments, the configuration file os2cw.yaml, or a combination of both with command line taking precedent.

Application will search for os2cw.yaml in /etc and the current working directory.

AWS Region by default will try to be inferred by instance metadata. It can be overriden, in order of precedence, by:

  • command-line flag --region
  • enviroment variable AWS_REGION
  • configuration file region value

Authentication to AWS is handled by the following methods, in order or precedence:

  • command-line flags --access-key and --secret0key
  • environment variables AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
  • configuration file accessKey and secretKey values
  • IAM Role assigned to EC2 instance

The program requires write permission to CloudWatch. Use the following policy as a guide.

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "cloudwatch:DescribeAlarmHistory",
                "cloudwatch:DescribeAlarms",
                "cloudwatch:DescribeAlarmsForMetric",
                "cloudwatch:GetMetricStatistics",
                "cloudwatch:ListMetrics",
                "cloudwatch:PutMetricAlarm",
                "cloudwatch:PutMetricData"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "logs:CreateLogGroup",
                "logs:CreateLogStream",
                "logs:DescribeLogGroups",
                "logs:DescribeLogStreams",
                "logs:PutLogEvents"
            ],
            "Resource": [
                "*"
            ]
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstanceAttribute",
                "ec2:DescribeInstanceStatus",
                "ec2:DescribeInstances",
                "ec2:DescribeTags"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

Help

Usage:
     os2cw send [flags]

   Examples:
     os2cw send -u gb -m mb -v / -v /home mem-avail mem-used vol-free uptime

   Flags:
         --dryrun                output metrics without sending to CloudWatch
     -i, --id string             system id to store metrics
     -m, --mem-unit string       memory size unit (b, kb, mb, gb)
     -n, --namespace string      CloudWatch namespace
     -u, --vol-unit string       volume size unit (b, kb, mb, gb, tb)
     -v, --volumes stringSlice   volumes to report (examples: /,/home,C:)



   Global Flags:
         --access-key string   AWS access key id
         --config string       config file (default is os2cw.yaml)
         --region string       AWS region
         --secret-key string   AWS secret access key

   Available Metrics:
         mem-avail  MemoryFreePercentage
         mem-free   MemoryFree
         mem-used   MemoryUsed
         mem-util   MemoryUsedPercentage
         uptime     Uptime
         vol-avail  VolumeFreePercentage
         vol-free   VolumeFree
         vol-used   VolumeUsed
         vol-util   VolumeUsedPercentage

Authors

License

This project is licensed under the MIT License - see the LICENSE file for details

Acknowledgments

  • Thanks to the developers of gopsutil who did all the legwork for me.