Моніторинг, яким керують зі скрипта
Усе, що панель керування робить із монітором, — це один curl, а решта — адреса, яку ви пінгуєте.
Створити, перевірити, прочитати назад
Запит, крок CI, що ним користується, і JSON, який повертається.
curl
curl -X POST https://app.tenium.app/api/v1/monitors \
-H "Authorization: Bearer $TENIUM_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"api-prod","type":"http",
"url":"https://api.example.com/health",
"intervalSec":60,"expectedStatus":["2xx"]}' GitHub Action
name: deploy
on: { push: { branches: [main] } }
jobs:
deploy:
runs-on: ubuntu-latest
env:
B: https://app.tenium.app/api/v1
ID: ${{ vars.TENIUM_MONITOR_ID }}
H: "Authorization: Bearer ${{ secrets.TENIUM_KEY }}"
steps:
- uses: actions/checkout@v4
- run: curl -fsS -X POST -H "$H" "$B/monitors/$ID/pause"
- run: ./deploy.sh
- if: always()
run: curl -fsS -X POST -H "$H" "$B/monitors/$ID/resume"
- name: Verify from outside
run: |
curl -fsS -X POST -H "$H" "$B/monitors/$ID/check"
sleep 20
curl -fsS -H "$H" "$B/monitors/$ID" | jq -e '.status == "up"' Відповідь
{
"id": "a3f1c2d4-9e8b-4f6a-b7c5-1d2e3f4a5b6c",
"name": "api-prod",
"type": "http",
"url": "https://api.example.com/health",
"intervalSec": 60,
"expectedStatus": ["2xx"],
"status": "pending",
"paused": false,
"nextCheckAt": "2026-01-20T10:15:03Z",
"createdAt": "2026-01-20T10:15:00Z"
} Ключі із записом потребують Pro або Agency; ключі лише для читання працюють на всіх тарифах.
Ілюстративний макет
Три речі, які тут важливі
Простий REST API
JSON на вході й виході, ключі bearer, курсори. Ключі лише для читання — на всіх тарифах, із записом — на Pro і Agency.
Підписані webhook
Події incident.opened, acknowledged і resolved з підписом HMAC-SHA256 — з Pro. Невдалі доставки повторюються.
Перевірки за тілом відповіді
Шлях JSON з умовою «дорівнює», «містить» чи «більше» — з Starter. Відповідь 200, у якій сказано, що черга стоїть, усе одно вважається збоєм.
Сповіщення приходять туди, де ви вже працюєте
E-mail, Discord і Google Chat — на всіх тарифах; Slack, Telegram, Teams і Mattermost — з тарифу Starter; webhook — з Pro; Zapier і PagerDuty — на Agency. SMS і голосових дзвінків немає.
- Slack
- Telegram
- Discord
- PagerDuty
- Zapier
- Webhook
Сервіс, описаний у репозиторії
Ілюстративний сценарій, а не історія клієнта
- Репозиторій інфраструктури додає опис монітора поруч із сервісом.
- Пайплайн надсилає його в API ключем із правом запису, збереженим як секрет CI.
- Після релізу крок CI викликає перевірку й валить завдання, якщо ззовні сервіс не доступний.
Монітор існує, бо існує код. Нікому не треба пам’ятати, що його треба додати.
Скільки коштує вам година простою?
Груба чесна цифра, щоб порівняти її з ціною монітора. Рахується у вашому браузері, нічого нікуди не надсилається.
Для порівняння: тариф Starter коштує $7 на місяць. Виторг — це не всі витрати (час підтримки, реклама, що продовжує йти, довіра), тож вважайте цифру нижньою межею.
Створюйте монітор разом із кодом сервісу
Монітор, який хтось має згадати додати вручну, — це монітор, якого не буде в потрібний день. Якщо інфраструктура вже лежить у репозиторії, додайте перевірку туди ж: один запит із ключем із правом запису. Такі ключі доступні на Pro ($29) і Agency ($59), а ключ лише для читання, який можна віддати панелі чи Slack-боту, є на всіх тарифах, зокрема Free.
curl -X POST https://app.tenium.app/api/v1/monitors \
-H "Authorization: Bearer $TENIUM_KEY" \
-H "Content-Type: application/json" \
-d '{"name":"api-prod","type":"http","url":"https://api.example.com/health",
"intervalSec":60,"expectedStatus":["2xx"]}'Heartbeat — це просто адреса: викличте її curl, wget чи будь-яким HTTP-клієнтом методом GET або POST. Суфікси позначають початок, завершення й збій, а разом із запитом можна надіслати до 10 КБ тексту.
Перевірки, що читають відповідь
Health-ендпоінт, який повертає 200, коли бази вже немає, — класична брехлива перевірка. З Starter можна перевіряти тіло: шлях JSON $.status дорівнює ok, $.queue.depth менше за 100. Кілька правил об’єднуються через AND. Є підписані webhook і значки статусу для README.
Heartbeat — один рядок наприкінці скрипта
Для всього, що виконується за розкладом, змініть напрямок. Ваше завдання викликає адресу після завершення, а монітор відкриває інцидент, якщо виклик запізнився. Нічого встановлювати не треба:
# crontab
0 3 * * * /usr/local/bin/backup.sh \
&& curl -fsS -m 10 https://ping.tenium.app/h/abc123 >/dev/null \
|| curl -fsS -m 10 https://ping.tenium.app/h/abc123/failДодайте /start на початку скрипта, щоб міряти час виконання. Під цей шаблон підходять GitHub Actions, GitLab CI, таймери systemd і Kubernetes CronJob, бо всі вони вміють запускати curl. Див. моніторинг cron-завдань і довідник з heartbeat.
Webhook і потік подій
На Pro контакт webhook отримує JSON про відкриття, підтвердження отримання й закриття інцидентів, а також про термін дії SSL і домену, сповіщення про час відповіді та запізнілі heartbeat. Кожну доставку підписано. Мінімальна перевірка на Node — це десяток рядків із createHmac і timingSafeEqual, і вона є в документації. Ставтеся до приймача як до будь-якої публічної адреси: перевіряйте підпис і мітку часу, швидко відповідайте 2xx, а довгу роботу виконуйте потім. Відповіді не 2xx повторюються п’ять разів приблизно за півгодини. Формати даних: дані webhook.
Значки й публічний статус
Для відкритих проєктів і внутрішніх порталів значок аптайму — це невеликий SVG, який можна вставити в README. Згенеруйте його інструментом значків аптайму і вставте розмітку. Якщо потрібна сторінка для людей, сторінки статусу публікують історію компонентів на вашому домені з тарифу Starter.
Обмеження, які варто знати, перш ніж будувати на цьому
- Читання: 600 запитів на хвилину на ключ. Запис: 120 на хвилину на ключ. У відповідях є заголовки
X-RateLimit-*. - Пагінація курсорна, за замовчуванням 50 результатів, максимум 200.
- Кожен монітор — це один запит; багатокрокові сценарії й скрипти для браузера не підтримуються.
- Версія API стоїть у шляху (
/v1); додавання без поломок версії не змінює, а несумісні зміни діють із перекриттям шість місяців.
Хочете, щоб це зробив асистент? Дивіться чесний стан наших планів щодо MCP-сервера.
Запитання розробників
Який тариф потрібен для запису через API?
Читати монітори, інциденти й перевірки можна на будь-якому тарифі. Створювати, змінювати й видаляти — лише ключем із правом запису на Pro ($29) або Agency ($59). Без нього буде 403 із кодом plan_limit.
Чи потрібен SDK для heartbeat?
Ні. Heartbeat — це адреса, яку ви викликаєте curl, wget чи будь-яким HTTP-клієнтом. Суфікси позначають початок, завершення й збій.
Чи можна перевіряти JSON-відповідь?
Так, з Starter. Використовуйте шляхи з крапками й дужками на кшталт $.data.items[0].id та умови «дорівнює», «не дорівнює», «містить», «більше», «менше» або «існує». Відповідь 200, у тілі якої сказано, що черга стоїть, усе одно вважається збоєм.
Як автентифікуються виклики webhook?
Кожен запит має заголовок X-Tenium-Signature із міткою часу та HMAC-SHA256 від тіла за секретом контакту. Перевіряйте його й відхиляйте застарілі мітки часу. Невдалі доставки повторюються з наростаючими паузами.
Чи є SDK або MCP-сервер?
SDK немає, а MCP-сервер лише запланований. Підтримується REST API, і прості приклади з curl у документації навмисно є всім, що вам потрібно.
Створіть ключ лише для читання й подивіться
Тариф Free, без картки. Налаштування, потім ключі API, потім «Новий ключ».