Scrape Alertmanager API - PullRequest
       92

Scrape Alertmanager API

0 голосов
/ 14 апреля 2020

У меня есть кластер Openshift 3.11 с установкой по умолчанию Prometheus и Alertmanager. Я хочу написать сценарий python для очистки конечной точки API Alertmanager, чтобы я мог проанализировать данные и передать их стороннему инструменту мониторинга для нашей команды ops. Моя проблема в том, что для доступа к API мне нужно пройти аутентификацию по oauth. Как я могу сделать это в течение python?

Ответы [ 2 ]

0 голосов
/ 22 апреля 2020

Я нашел исправление для себя.

Мне нужно было создать учетную запись службы

oc create serviceaccount <serviceaccount name> -n <your-namespace>

Затем создать привязку роли кластера для нее

oc create clusterrolebinding <name for your role> \
  --clusterrole=cluster-monitoring-view \
  --serviceaccount=<your-namespace>:<serviceaccount name>

Получить токен от SA, а затем использовать его в curl

oc sa get-token <serviceaccount name> -n <your-namespace>
0 голосов
/ 14 апреля 2020

Я не знаю, отличается ли это от менеджера оповещений по сравнению с Reddit API, но когда я настроил для этого бота, мне пришлось сначала зарегистрировать его на странице OAuth, затем мне нужно было использовать коды что он дал мне там, чтобы запросить токен доступа с остальными моими пользовательскими данными (логин и пароль, а также как называлось приложение). Затем я мог бы использовать эту аутентификацию для связи с конечной точкой API.

Здесь это функция, которую я сделал для запроса токена доступа у Reddit:

def AuthRequest():
    import requests
    import requests.auth
    import json

    client_auth = requests.auth.HTTPBasicAuth('Application ID code', 'OAuth secret code')
    post_data = {"grant_type": "password", "username": "Your_Username", "password": "Your_Password"}
    headers = {"User-Agent": "Name_Of_Application"}
    response = requests.post("https://www.reddit.com/api/v1/access_token", auth=client_auth, data=post_data, headers=headers)

    return response.json()

А вот код, который связывается с конечной точкой и получает от нее данные:

    import requests
    import requests.auth
    import json

    currentComments = []

    headers = {"Authorization": auth['token_type'] + " " + auth['access_token'], "User-Agent": "Your_Application_Name"}

    mentions = requests.get("https://oauth.reddit.com/message/unread.json", headers=headers).json()

Обратите внимание, что «auth» - это просто «ответ» от токена аутентификации. Надеюсь, это поможет, я не знаю, насколько это отличается от alertmanager, поскольку мне никогда не приходилось его использовать.

...