Ansible로 Kibana 대시보드 자동 생성

6624 단어 Ansible키바나
실험실에서는 서버 모니터링에 Sensu을 사용합니다.
agent 인 sensu-client를 설치하기 위해 구성 관리 도구 Ansible를 사용합니다.
이번에는 Ansible의 실행 대상을 기술 한 인벤토리에서 키바나 대시 보드를 생성해 보겠습니다.
  • 실험실에서 Ansible 사용하는 이야기 - Qiita

  • 키바나



    여기에서는 키바나 3.1.2을 사용합니다.
    (Kibana 4는 json 파일 형식의 대시 보드를 사용할 수 없기 때문에.)

    설치 대상은 /opt/kibana에서 config.jsondefault_route를 변경합니다.
    dashborads.json는 sensu-client 목록을 표시합니다.

    /opt/kibana/config.json
    /** @scratch /configuration/config.js/5
     *
     * ==== default_route
     *
     * This is the default landing page when you don't specify a dashboard to load. You can specify
     * files, scripts or saved dashboards here. For example, if you had saved a dashboard called
     * `WebLogs' to elasticsearch you might use:
     *
     * default_route: '/dashboard/elasticsearch/WebLogs',
     */
    default_route     : '/dashboard/file/dashboards.json',
    

    Ansible Inventory



    실제로 사용하는 Inventory의 일부를 보여드리겠습니다. 호스트 이름은 신경 쓰지 마십시오.[kibana]에 대해 playbook을 실행하고 [sensu-client]의 각 호스트에 대한 대시 보드를 생성합니다.
    [kibana]
    192.168.11.250
    
    [sensu-client]
    air          ansible_ssh_host=air.eng.kagawa-u.ac.jp
    rewrite      ansible_ssh_host=rewrite.eng.kagawa-u.ac.jp
    clannad      ansible_ssh_host=clannad.eng.kagawa-u.ac.jp
    planetarian  ansible_ssh_host=planetarian.eng.kagawa-u.ac.jp
    kanon        ansible_ssh_host=planetarian.eng.kagawa-u.ac.jp
    

    Ansible Playbook



    여기에서는 사용중인 playbook의 일부를 소개합니다.
    전체는 GitHub에 있으므로 참조하십시오.
  • ansible-playbooks/kibana at master · hico-horiuchi/ansible-playbooks
  • with_items를 사용하여 [sensu-client]의 각 호스트에 대한 대시 보드를 생성합니다.
    목록 dashboards.json도 생성되지만 여기에서는 템플릿에서 for를 사용합니다.

    kibana.yml
    ---
    - hosts: kibana
      sudo: yes
      gather_facts: no
      tasks:
    
        - name: create each server.json
          template:
            src=templates/server.json.j2
            dest=/opt/kibana/app/dashboards/{{ item }}.json
            owner=root
            group=root
            mode=0644
          with_items: groups['sensu-client']
    
       - name: create dashboards.json
          template:
            src=templates/dashboards.json.j2
            dest=/opt/kibana/app/dashboards/dashboards.json
            owner=root
            group=root
            mode=0644
    
    server.json.j2는 호스트 이름 {{ item }}을 사용합니다.
    대시 보드 제목과 Elasticsearch에 대한 검색 쿼리에 필요합니다.

    server.json.j2
    {
      "title": "{{ item }}",
      "services": {
        "query": {
          "list": {
            "0": {
              "id": 0,
              "color": "#bc3539",
              "alias": "",
              "pin": false,
              "type": "lucene",
              "enable": true,
              "query": "key:\"{{ item }}.cpu.usage\""
            },
    ...
    
    dashboards.json.j2Jinja2for을 사용합니다.
    각 대시 보드에 대한 링크와 IP 주소 목록을 생성합니다.

    dashboards.json.j2
    ...
    "rows": [
        {
          "title": "dashboards",
          "height": "500px",
          "editable": false,
          "collapse": false,
          "collapsable": false,
          "panels": [
            {
              "error": false,
              "span": 4,
              "editable": false,
              "type": "text",
              "loadingEditor": false,
              "mode": "markdown",
              "content": "
                {% for host in groups['sensu-client'] %}
                  - [{{ host }}](index.html#/dashboard/file/{{ host }}.json) ({{ hostvars[host]['ansible_ssh_host'] }})\n
                {% endfor %}\n",
              "style": {},
              "title": "sensu metrics"
            }
          ],
          "notice": false
        }
      ],
    ...
    

    결과



    Ansible Inventory에서 sensu-client 대시 보드와 그 목록을 생성 할 수있었습니다.
    또한 Rails 대시 보드를 생성하거나 함께 정적 파일을 전송합니다.
    Kibana 4에서도 비슷한 일을하고 싶으므로 노하우가 있다면 알려주세요!



    좋은 웹페이지 즐겨찾기