Grafana

Objetivo

Documentar funcionalidades do Grafana

Dependências

  1. Grafana, 11.5.2, Dashboards

Instalação

Instale de acordo com sua distribuição na documentação

Exemplo com Debian

# Dependencies
sudo apt-get install -y apt-transport-https software-properties-common wget

# GPG keys
sudo mkdir -p /etc/apt/keyrings/
wget -q -O - https://apt.grafana.com/gpg.key | gpg --dearmor | sudo tee /etc/apt/keyrings/grafana.gpg > /dev/null

# APT sources
echo "deb [signed-by=/etc/apt/keyrings/grafana.gpg] https://apt.grafana.com stable main" | sudo tee -a /etc/apt/sources.list.d/grafana.list
sudo apt-get update

# Installs the latest OSS release:
sudo apt-get install grafana

Dashboards

Para criar dashboards e visualizar dados:

  • Em Data source adicione a fonte dos dados

  • Em Dashboards adicione dentro de um folder new -> new dashboard para criar um novo dashboard ou new -> import para importar um template pronto.

  • Para importar, adicione a ID da biblioteca de templates do grafana (ou o JSON correspondente), os sources necessários e clique em load. Finalmente salve o dashboard.

Alertas

É possível configurar o grafana para enviar alertas a um canal de comunicação como email, telegram ou discord.

  • Alto uso de CPU

  • Alto uso de memória

  • Alto tempo de consulta

  • Alto uso de arquivos abertos

  • Número de conexões

Contact points

Primeiro é necessario adicionar o discord como um dos pontos de notificação.

Acessando a aba Alerting->Contact points clique em Add contact point.

De um nome, selecione Discord como integração, adicione a URL do Webhook do canal de destino do Discord e clique em Teste.

Se uma notificação de teste for enviada ao Discord, clique em salvar.

Notification policies

Politicas de notificação determinam como os alertas interagem com contact points.

Alert rules

Para criar alertas acesse Alerting->Alert Rules e clique em create alert rules.

Coloque um nome no alerta, selecione o Data source (prometheus para este caso).

Perceba que a confuguração é baseada em blocos de entrada e saída, inicialmente há 3 blocos de nome A, B e C das quais é possível renomear.

Para o bloco A selecione a métrica a ser testada como pg_up para determinar se um banco postgres está rodando e selecione os filter labels de acordo.

Para o bloco B selecione uma função com base na métrica de saída do bloco A. Um exemplo é Last que representa o último valor lido.

Para o bloco C selecione o gatilho o alerta, ou seja, se o valor de saída de B for maior ou menor que alguma condição.

Configure o folder e o intervalo de tempo dos testes. Adicione também em Description e Summary informações adicionais que vão ser enviadas como parte da notificação do alerta e clique em salvar.

Templates

Para alterar o template padrão de notificação do grafana, acesse Contact points e clique em Add template. Adicione um nome e preencha o campo Content com o seguinte template:

{{ define "alert_severity_prefix_emoji" -}}
	{{- if ne .Status "firing" -}}
		:white_check_mark:
	{{- else if eq .CommonLabels.severity "critical" -}}
		:red_circle:
	{{- else if eq .CommonLabels.severity "warning" -}}
		:warning:
	{{- end -}}
{{- end -}}


{{ define "slack.title" -}}
	{{ template "alert_severity_prefix_emoji" . }} 
	[{{- .Status | toUpper -}}{{- if eq .Status "firing" }} x {{ .Alerts.Firing | len -}}{{- end }}  | {{ .CommonLabels.env | toUpper -}} ] ||  {{ .CommonLabels.alertname -}}
{{- end -}}

{{- define "slack.text" -}}
{{- range .Alerts -}}
{{ if gt (len .Annotations) 0 }}
*Summary*: {{ .Annotations.summary}}
*Description*: {{ .Annotations.description }}
Labels: 
{{ range .Labels.SortedPairs }}{{ if or (eq .Name "env") (eq .Name "instance") }} {{ .Name }}: `{{ .Value }}`
{{ end }}{{ end }}
{{ end }}
{{ end }}
{{ end }}

Por fim, os templates são configurados aos contact points, portanto edite o contact point do discord e no campo Optional Discord settings adicione em Title {{ template "slack.title" . }} e para Message content adicione {{ template "slack.text" . }}