---
title: Monitoramento Kubernetes com Telegraf Operator
slug: aiops/monitoramento-kubernetes-com-telegraf-operator
docTags: 
createdAt: 2024-09-03T17:11:43.613Z
---

Configurando o monitoramento de um cluster Kubernetes usando o Telegraf Operator:

## Pré-requisitos

- Cluster Kubernetes em execução

### 1. Instalando o telegraf-operator no seu cluster Kubernetes e configurando o ambiente:

A versão atualizada do telegraf-operator pode ser instalada usando o Repositório Helm do InfluxData. Verifique o [link](https://github.com/influxdata/telegraf-operator/blob/master/README.md) para configuração do helm e do telegraf-operator e o [link](https://github.com/influxdata/telegraf-operator/blob/master/Makefile) para configuração do ambiente contido no arquivo Makefile.

Execute:

:::CodeblockTabs
bash

```dockerfile
helm repo add influxdata https://helm.influxdata.com/
helm upgrade --install telegraf-operator influxdata/telegraf-operator
```
:::

### Configuração do ambiente:&#xA;

:::CodeblockTabs
bash

```linux
# garantir que o contexto correto do kubectl esteja definido e sendo 
# usado, caso contrário irá falhar
kubectl config use-context telegraf-operator-nome

# criar namespace
kubectl create namespace <nome>
```
:::

### 2. Configurar as classes Telegraf:

O arquivo **classes.yml** define as classes Telegraf que serão usadas para reportar dados para o InfluxDB e para a saída padrão. Substitua **\<**&#x64;bworker\_i&#x70;**>**(ceritifque-se que seja o. IP da instância **DB Worker**), **\<database>**, **\<hostname>** e **\<cluster>** pelos valores desejados.

Exemplo de um arquivo classes.yml:

:::CodeblockTabs
classes.yml

```yaml
apiVersion: v1
kind: Namespace
metadata:
  name: telegraf-operator
---
apiVersion: v1
kind: Secret
metadata:
  name: telegraf-operator-classes
  namespace: telegraf-operator
stringData:
  #Classes básicas que podem ser usadas para desenvolver o operador do Telegraf; essas classes
  #relatam para o InfluxDB v1 no mesmo cluster, e também para o arquivo stdout por conveniência
  app: |+
    [[outputs.influxdb]]
      urls = ["<dbworker_ip>:8086"]
    [global_tags]
    
      database = "<database>"
      hostname = "<hostname>"
      cluster = "<cluster>"
  default: |+
    [[outputs.influxdb]]
      urls = ["<dbworker_ip>:8086"]
    [global_tags]
      database = "<database>"
      hostname = "<hostname>"
      cluster = "<cluster>"
  basic: |+
    [[outputs.influxdb]]
      urls = ["<dbworker_ip>:8086"]
    [global_tags]
      database = "<database>"
      hostname = "<hostname>"
      cluster = "<cluster>"
```
:::

### 3. Configurar o plugin do Telegraf:

O arquivo **plugin\_nome.yml** define um StatefulSet para um plugin que será monitorado pelo Telegraf. Substitua os valores de **name,** **namespace,** **serviceName, app, inputs.plugin\_nome**,  **urls**, **limits-cpu** e **limits-memory** pelos valores desejados. Verifique os possíveis plugins de input no [link](https://github.com/influxdata/telegraf/tree/master/plugins/inputs).

**Exemplo de um arquivo nginx.yaml:**

:::CodeblockTabs
yml

```yaml
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: nginx-deamon
  namespace: test
spec:
  serviceName: "nginx-telegraf"
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
      annotations:
        telegraf.influxdata.com/inputs: |+
          [[inputs.nginx]]
            urls = ["<nginx-url>"]
        telegraf.influxdata.com/class: app
        telegraf.influxdata.com/env-fieldref-NAMESPACE: metadata.namespace
        telegraf.influxdata.com/limits-cpu: '750m'
        # limite de memória inválido, que será ignorado
        telegraf.influxdata.com/limits-memory: '800x'
    spec:
      containers:
      - name: nginx
        image: nginx:alpine
```
:::

### 4. Aplicar as configurações:

Aplique as configurações usando o comando **kubectl apply -f \<arquivo.yml>** para cada um dos arquivos YAML.

**Deploy dos Pods e Contexto Kubernetes:**

Certifique-se de que o contexto correto do kubectl esteja definido e sendo utilizado, caso contrário, ira falhar:

:::CodeblockTabs
bash

```dockerfile
kubectl config use-context telegraf-operator-nome
kubectl apply -f classes.yml
kubectl apply -f dev.yml
kubectl apply -f examples/plugin_nome.yml
kubectl describe pod --namespace=<namespace> <pod_name> 
```
:::

Acesso aos logs do deploy:

:::CodeblockTabs
bash

```dockerfile
kubectl logs -f -n <namespace> <pod_name> -c telegraf
```
:::

**Links:**
Telegraf Operator:

- [https://github.com/influxdata/telegraf-operator/blob/master/README.md](https://github.com/influxdata/telegraf-operator/blob/master/README.md)

Plugins:

- [https://github.com/influxdata/telegraf/tree/master/plugins/inputs](https://github.com/influxdata/telegraf/tree/master/plugins/inputs)

