sensu test (draft)

sensu 문서

Overview

Quick Start

Installation

Guides

Reference Docs

API

Enterprise

Platforms


Overview : 전체 개괄

Quick Start : 간단히 설치하고 설정해보기

Installation : 세부 설치 문서

Guides : Getting Started Guide. The complete getting started guide


Quick Start

sensu install

sensu server install

sensu CentOS6에 간단히 설치하기.

https://sensuapp.org/docs/1.2/quick-start/the-five-minute-install.html

data store, transport(message bus communication) 에 모두 redis를 이용함. 

위 문서를 보고 protected-mode  를 no로 변경했지만 다른 서버에서 redis 6379 port로 접근이 안 되었다. /etc/redis.conf 에서 127.0.0.1 에서만 bind 하도록 되어 있기 때문이다. 이 부분을 바꾸어 준다.

이 내용은 https://sensuapp.org/docs/1.0/reference/redis.html#sensu-redis-configuration 에도 나옴.


# diff redis.conf.orig redis.conf
61c61
< bind 127.0.0.1
---
> bind 0.0.0.0
80c80,81
< protected-mode yes
---
> #protected-mode yes
> protected-mode no

uchiwa install

위 문서에 uchiwa 내용은 없다.

https://docs.uchiwa.io/getting-started/installation/ 문서를 참고하되 yum  install uchiwa 해서 설치를 하면 된다. 해당 문서에는 yum install sensu 라고 잘못 나와 있다.

uchiwa 설정은 https://docs.uchiwa.io/getting-started/configuration/ 에 있는 대로 그대로 하면 된다. "sensu" 의 host만 127.0.0.1로 바꾸면 된다. (sensu api 서버의 ip)

uchiwa 띄우고 hostname:3000 으로 접속을 하면 된다.

ubuntu에 sensu-client 설치하기

https://sensuapp.org/docs/1.2/platforms/sensu-on-ubuntu-debian.html

위 문서 보고 sensu 설치


sensu client 설정하기. redis.json 에서 host는 redis가 설치된 서버를 지정하면 된다.

[vagrant] root@ubuntu02:/etc/sensu/conf.d# cat /etc/sensu/conf.d/client.json
{
  "client": {
    "environment": "development",
    "subscriptions": [
      "dev"
    ]
  }
}
[vagrant] root@ubuntu02:/etc/sensu/conf.d# cat /etc/sensu/conf.d/transport.json
{
  "transport": {
    "name": "redis",
    "reconnect_on_error": true
  }
}
[vagrant] root@ubuntu02:/etc/sensu/conf.d# cat /etc/sensu/conf.d/redis.json
{
  "redis": {
    "host": "192.168.40.14",
    "port": 6379
  }
}


Learn Sensu in 15 Minutes

https://sensuapp.org/docs/1.2/quick-start/learn-sensu-basics.html

CentOS6에서 sensu halder를 위해서 mailer를 설치하는데 gcc 등 개발툴이 설치가 되어있어야 mailer 설치가 가능했다.

mailer.json 의 경우에는 로컬에 postfix를 띄우고 smtp_address, smtp_port를 지정해 주면 된다. smtp_port를 지정하지 않았을 때는 발송이 안 되었다. 디폴트 port  설정이 없는 것 같다.

# cat mailer.json
{
    "mailer": {
        "mail_from": "alerts@example.com",
        "mail_to": "taejoon.moon@rgpkorea.co.kr",
        "smtp_address": "127.0.0.1",
        "smtp_port": 25
    }
}

Getting Started Guide

https://sensuapp.org/docs/1.0/guides/getting-started/overview.html

An introduction to adding clients

client json 설정

어떤 transport 사용을 할지 설정

transport 설정 (rabbitmq or redis)


네트워크 장비 등 sensu를 설치할 수 없는 장비를 모니터링 해야 하는 경우에는 proxy clients 이용함.


An introduction to checks

  • Creation of standard checks (functional tests)
  • Creation of metric collection checks (server resources, etc)
  • Creation of metric analysis checks (querying time series data, etc)


metric analysis check 를 이용하면 graphite 등과 같은 외부 서비스에서 데이터를 질의해서 체크를 할 수 있다. 예를 들어 특정 시점의 단일 CPU 사용량 대신에 특정 기간의 CPU 사용량을 가지고 모니터링하고 알럿하는 등.

By querying external metric stores (e.g. Graphite) to perform data evaluations, metric analysis checks allow you to perform powerful analytics based on trends in metric data rather than a single data point. For example, where monitoring and alerting on a single CPU utilization data point can result in false positive events based on momentary spikes, monitoring and alerting on CPU utilization data over a specified period of time will improve alerting accuracy.


An introduction to handlers

pipe, tcp, udp, transport, set handler


An introduction to filters

Sensu filters allow you to filter (out) events destined for one or more event handlers. Sensu filters inspect event data and match its key/values pairs with filter definition attributes, to determine if the event should be passed to an event handler. Filters are commonly used to filter event recurrences to eliminate notification noise and to filter events that are not for production machines.

sensu filters는 event handlers로 가는 이벤트를 필터링할 수 있다. sensu filters는 event data에서 attribute 에 설정한 key/values가 있는지를 찾아서 event를 event handler로 넘겨주어야 할지 결정한다. filters 는 보통 너무 많은 불필요한 알람을 제거하기 위해 이벤트의 재발생을 필터링하는데 사용하고 production 이 아닌 이벤트를 필터링하는데 사용한다.


ruby 로 event filter를 만들어서 사용하는 예제가 나온다. 1분에 한번씩 체크를 하는데 필터를 이용하여 1시간에 한번 event handler가 실행되도록 설정을 할 수가 있다.


An introduction to mutators

Sensu mutators mutate (transform) event data for a Sensu event handler. Sensu event handlers can expect event data be in a different format and/or manipulated. Mutators allow one or more handlers to share logic, reducing code duplication, and simplifying the event handlers. Sensu mutators are executed on machines running the Sensu server or Sensu Enterprise. Mutators are essentially commands (or scripts) that receive JSON formatted event data via STDIN and output the mutated event data to STDOUT. Mutators use an exit status code of 0 to indicate a success, anything else indicates a failure. If a mutator fails to execute (non-zero exit status code), the event will not be handled, and an error will be logged.

sensu event handler를 위해서 event data를 변환하여준다. 그러면 sensu event handlers는 다른 포맷이나 변경된 event data를 기대할 수 있다. mutators는 하나 또는 여러 개의 handlers에서 logic 공유, 코드 중복 방지, event handler를 간단하게 만들 수 있다.

그런데 위의 문서에는 자세한 내용이 없는데 https://sensuapp.org/docs/1.0/reference/mutators.html 의 내용을 함께 본다.

https://sensuapp.org/docs/1.0/reference/mutators.html 에서 보면 sensu event handlers 에서 event data를 변경할 수 있다. 이런 경우 event data를 변경하고 특정 action을 실행하는 것이 메모리에서 이루어 지기 때문에(동일 프로세스) mutator를 실행하고 handler를 실행하는 것보다 더 좋은 성능이 나온다. 그래서 많은 경우에는 이 방식을 추천한다. 그렇지만 여러 개의 handlers에서 비슷한 이벤트 데이터 변경이 필요한 경우에는 mutator 가 코드 중복을 줄일 수 있고 event handler logic을 간단하게 할 수 있다.