gatus/README.md

98 lines
4.3 KiB
Markdown
Raw Normal View History

2019-09-15 01:59:05 +02:00
# gatus
2020-04-10 23:19:59 +02:00
![build](https://github.com/TwinProduction/gatus/workflows/build/badge.svg?branch=master)
2019-09-15 01:59:05 +02:00
[![Docker pulls](https://img.shields.io/docker/pulls/twinproduction/gatus.svg)](https://cloud.docker.com/repository/docker/twinproduction/gatus)
2019-09-05 01:37:13 +02:00
2019-09-15 01:25:59 +02:00
A service health dashboard in Go that is meant to be used as a docker
image with a custom configuration file.
2019-09-11 03:05:57 +02:00
2020-04-18 18:13:09 +02:00
I personally deploy it in my Kubernetes cluster and have it monitor the status of my
core applications: https://status.twinnation.org/
2019-11-11 22:15:35 +01:00
2019-09-11 03:05:57 +02:00
## Usage
2019-09-05 01:37:13 +02:00
By default, the configuration file is expected to be at `config/config.yaml`.
You can specify a custom path by setting the `GATUS_CONFIG_FILE` environment variable.
Here's a simple example:
2019-09-05 01:37:13 +02:00
```yaml
metrics: true # Whether to expose metrics at /metrics
2019-09-05 01:37:13 +02:00
services:
- name: twinnation # Name of your service, can be anything
url: https://twinnation.org/health
interval: 15s # Duration to wait between every status check (default: 10s)
2019-09-05 01:37:13 +02:00
conditions:
2020-04-12 05:14:20 +02:00
- "[STATUS] == 200" # Status must be 200
- "[BODY].status == UP" # The json path "$.status" must be equal to UP
2020-04-12 05:14:20 +02:00
- "[RESPONSE_TIME] < 300" # Response time must be under 300ms
- name: example
2020-04-12 05:17:31 +02:00
url: https://example.org/
interval: 30s
conditions:
- "[STATUS] == 200"
```
Note that you can also add environment variables in the your configuration file (i.e. `$DOMAIN`, `${DOMAIN}`)
### Configuration
2020-04-16 03:55:10 +02:00
| Parameter | Description | Default |
| ----------------------- | ------------------------------------------------------ | -------------- |
2020-04-16 03:55:10 +02:00
| `metrics` | Whether to expose metrics at /metrics | `false` |
| `services[].name` | Name of the service. Can be anything. | Required `""` |
| `services[].url` | URL to send the request to | Required `""` |
| `services[].conditions` | Conditions used to determine the health of the service | `[]` |
| `services[].interval` | Duration to wait between every status check | `10s` |
| `services[].method` | Request method | `GET` |
| `services[].body` | Request body | `""` |
| `services[].headers` | Request headers | `{}` |
### Conditions
Here are some examples of conditions you can use:
2020-04-13 01:51:28 +02:00
| Condition | Description | Passing values | Failing values |
| ------------------------------------- | ----------------------------------------- | ------------------------ | ----------------------- |
| `[STATUS] == 200` | Status must be equal to 200 | 200 | 201, 404, 500 |
| `[STATUS] < 300` | Status must lower than 300 | 200, 201, 299 | 301, 302, 400, 500 |
| `[STATUS] <= 299` | Status must be less than or equal to 299 | 200, 201, 299 | 301, 302, 400, 500 |
| `[STATUS] > 400` | Status must be greater than 400 | 401, 402, 403, 404 | 200, 201, 300, 400 |
| `[RESPONSE_TIME] < 500` | Response time must be below 500ms | 100ms, 200ms, 300ms | 500ms, 1500ms |
| `[BODY] == 1` | The body must be equal to 1 | 1 | literally anything else |
2020-04-13 01:54:33 +02:00
| `[BODY].data.id == 1` | The jsonpath `$.data.id` is equal to 1 | `{"data":{"id":1}}` | literally anything else |
| `[BODY].data[0].id == 1` | The jsonpath `$.data[0].id` is equal to 1 | `{"data":[{"id":1}]}` | literally anything else |
2020-04-13 01:51:28 +02:00
**NOTE**: `[BODY]` with JSON path (i.e. `[BODY].id == 1`) is currently in BETA. For the most part, the only thing that doesn't work is arrays.
2019-10-28 02:17:55 +01:00
## Docker
Building the Docker image is done as following:
```
2019-10-28 02:17:55 +01:00
docker build . -t gatus
```
2019-09-15 01:25:59 +02:00
2019-10-28 02:17:55 +01:00
You can then run the container with the following command:
2019-09-15 01:25:59 +02:00
2019-10-28 02:17:55 +01:00
```
docker run -p 8080:8080 --name gatus gatus
```
## Running the tests
2019-09-15 01:25:59 +02:00
```
2019-10-28 02:17:55 +01:00
go test ./... -mod vendor
2019-09-15 01:25:59 +02:00
```
## Using in Production
See the [example](example) folder.