Фильтр ответа Splunk с использованием запросов из ansible playbook

#api #rest #ansible #yaml #ansible-2.x

#API #rest #ansible #yaml #ansible-2.x

Вопрос:

В настоящее время мы вручную отслеживаем панели мониторинга splunk во время наших развертываний. Мы хотели бы автоматизировать это. Для этого мы хотели бы создать ansible playbook с запросами splunk. Этот сборник будет запущен во время развертывания.

Я успешно могу подключиться к splunk, но я не могу заставить работать поисковый запрос

 ####
# type: task
#
# vars:
#   5xxcheck_output(str,command): raw output from command
#   5xxcheck_response(str,command): raw output to json
#
# desc:
# uses splunk to get 5xxcheck

---
- name: Tasks to query splunk
  hosts: localhost
  connection: local
  tasks:
    - name: get search_id for 5xx check from splunk
      uri:
        url: https://<splunk_instance>/services/search/jobs
        follow_redirects: all
        method: POST
        user: xxxxxx
        password: xxxxxxx
        force_basic_auth: yes
        body: "search host=tc1* ResponseCode=500 earliest=-15m"
        body_format: raw
        validate_certs: no
        status_code: 201
        return_content: true
      register: search_id
    - debug: msg="{{ search_id.status }}"

    - name: use the search_id to get the 5xx check results
      uri:
        url: https://<splunk_instance>/services/search/jobs/{{ search_id }}/results/
        method: GET
        user: xxxxxx
        password: xxxxxxx
        force_basic_auth: yes
        body_format: raw
        return_content: true
      register: 5xxcheck_output
      until: 5xxcheck_output.status > 0 and 5xxcheck_output.status != 500

    - name: Put results into 5xxcheck_response
      set_fact:
        5xxcheck_response: "{{ 5xxcheck_output.json }}"

    - name: Print 5xxcheck_response if -v
      debug:
        var: 5xxcheck_response
        verbosity: 1
  

Я хотел бы использовать модуль uri для параметризации поиска splunk. Я могу выполнить следующие 2 шага из терминала, чтобы получить ответ

Шаг 1: получить SID (идентификатор поиска)

 curl -u  user:pwd -k https://<splunk-instance>/services/search/jobs -d search="search host=t1* ResponseCode=200 earliest=-15m"

<?xml version="1.0" encoding="UTF-8"?>
<response>
  <sid>1604947864.xxxxxx</sid>
</response>
  

Шаг 2: используйте SID для получения ответа

 curl -u user:pwd -k https://<splunk-instance>/services/search/jobs/<SID>/results/ --get -d output_mode=raw
  

Комментарии:

1. Пожалуйста, предоставьте результат первой команды curl,

2. @garylopez обновил ответ первой команды curl. По сути, он возвращает sid (search_id)

Ответ №1:

 ---
- name: Tasks to query splunk
  hosts: localhost
  connection: local
  tasks:
    - name: get search_id for 5xx check from splunk
      uri:
        url: https://splunk_instance/services/search/jobs/
        follow_redirects: all
        method: POST
        user: xxxxx
        password: xxxxx
        force_basic_auth: yes
        body_format: form-urlencoded
        status_code: [200, 201, 202]
        body:
          - [ search, "search host=t1* ResponseCode=500 earliest=-15m" ]
          - [ output_mode, "json" ]
        validate_certs: no
        return_content: true
      register: search_id
    - debug: msg="{{ search_id }}"
  

Это сработало для меня. Теперь я получаю действительный sid в качестве ответа при запуске этого сборника.