X-9 is a brazilian slang for "informer".
A X-9 person is motivated by envy.
This X-9 was motivated by keep learning golang.
It is a tool that alerts in Slack missbehavior of AWS instances.
A missbehavior is when an instance runs for short time (check the option TOLERANCE).
It is most usefull to monitor auto scaling groups (ASG). When an instance is member of a ASG the ASG name is used as its key.
It also provides an easy API that anwsers easy questions we are tired to give everyday, like:
- What are the instances running right now, by tags, regions ?
- How many instances we created in the last 24 hours ?
- How many spot instances we created today ?
- How many instances run for less than an hour ?
- How many spot instances run for less than an hour today ?
- How many instances we run by region ?
- How many instaces are run with a certain tag (for example by environment)?
- How many instances by type ?
- What are the missbehaving auto scaling groups right now ?
(check /api for a complete list)
Simply by getting the result of "describe instances" and sumarizes it in redis. The data expires in 24 hours.
A rudimentary tag support is provided in this first release. You must use the tags bellow. If don't use tags or different tags, don't worry, they will be show as "none".
| Tag | Description |
|---|---|
| Env | Environment, ie: QA, DEV, STG, PROD |
| Product | System |
| App | Component of System |
$ # make sure your aws cli is working
$ brew install go
$ brew install redis
$ brew install glide
$ mkdir ~/go/src/github.com/grupozapvivareal
$ cd ~/go/src/github.com/grupozapvivareal
$ git clone git@github.com:VivaReal/x9.git
$ export GOPATH=~/go/
$ glide install
$ redis-server &
$ export SLACK_BOT_URL="https://myslack...."
$ go run main.go
$ curl localhost:6969
$ export AWS_ACCESS_KEY_ID=XXXXXXXXX
$ export AWS_SECRET_ACCESS_KEY=XXXXXXX
$ go run main.go
$ make build
(will create the x9 executable file)
$ make docker_image DOCKER_REPO="myrepo"
$ docker run --name redis -d redis
$ docker run -p 6969:6969 \
-e REDIS_SERVER=redis:6379 \
-e AWS_ACCESS_KEY_ID=XXX \
-e AWS_SECRET_ACCESS_KEY="XXX" \
-e SLACK_BOT_URL="https://myslack...." \
myrepo/x9
$ curl localhost:6969/api
| Environment variable | Default value | Description |
|---|---|---|
| AWS_ACCESS_KEY_ID | - | optional, default provided by the aws-cli configuration |
| AWS_SECRET_ACCESS_KEY | - | optional, default provided by the aws-cli configuration |
| SLACK_BOT_URL | error | Slack bot URL |
| REDIS_SERVER | localhost:6379 | Redis server address and port |
| TOLERANCE | 3000 | Minimum amount of time instances must run to not be considered missbehave |
| ALERT_TIMEFRAME | 1200 | Interval between checks |
| SERVICE_PORT | 6969 | Webserver port |
| REGIONS | "sa-east-1,us-east-1" | Regions were to run "describe-instances" |
$ lynx --dump localhost:6969/api
| Starting by | Meaning |
|---|---|
| r_* | Sum of all regions |
| w_* | Sum of "wasted" instances (run for less time than $TOLERANCE) |
| s_* | Sum of spot instances |
| tmp_* | temporary keys |