Bosun - Получить IP-адрес хоста, используя.GetMeta

Я пытаюсь создать (golang) структуру для обработки предупреждений bosun, отправленных через http. Он содержит подробности предупреждения, самое главное, о eth0 IP-адрес соответствующего хоста.

/* This struct is defined as per the notification defined in bosun config */
type BosunAlert struct {
    AckUrl       string   `json:"ack"`
    AlertName    string   `json:"alert_name"`
    LastStatus   string   `json:"last_status"`
    IpMac        []string `json:"ip,omitempty"`
}

Соответствующий шаблон выглядит следующим образом:

template template.bosun_listener {
    subject = `{
        "ack":"{{.Ack}}",
        "alert_name":"{{.Alert.Name}}",
        "last_status":"{{.Last.Status}}",
        "ip":{{ .GetMeta "" "addresses" (printf "host=%s,iface=eth0" .Group.host) }}
    }`
    body = ``
}

Тем не менее, я получаю эту ошибку:

info: check.go:305: alert.network{host=147210308125790,ifName=server-1609}:
template: template.bosun_listener:6:12: executing "template.bosun_listener" at 
<.GetMeta>: error calling GetMeta: redigo: nil returned

Я использую строку [] для поля IpMac, так как не могу изолировать eth0 IP от его адреса Ethernet.

Есть ли способ сделать это?

РЕДАКТИРОВАТЬ: Это вывод, который я получаю:

"ack":"http://localhost:8070/action?
key=alert.network%7Bhost%3D147210308125790%2CifName%3server-1609%7D&type=ack",
"alert_name":"alert.network", "last_status":"critical", "ip":
["172.31.40.31/20","fe80::61:adff:feb1:1f5b/64"] }

Это предупреждение, которое я настроил:

alert alert.network {
    runEvery = 5
    $ip = ""
    template = template.bosun_listener
    $usage = avg(q("avg:rate:container.net.bytes{host=*,ifName=server*}", "5m", ""))
    crit = $usage > 100
    critNotification = notification.test
}

1 ответ

Решение

Вы уверены, что рассматриваемый хост является устройством eth0 (а bosun проиндексировал эти метаданные)? ноль означает, что не может найти запись.

Следующие работы для меня:

template test {
    subject = {{ .GetMeta "" "addresses" (printf "host=%s,iface=eth0" .Group.host) }}
}
Другие вопросы по тегам