es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Configuración automatizada de Kibana y Elasticsearch con el módulo Filebeat en Elastic Cloud para Kubernetes (ECK)

Estoy probando el Operador de K8s (también conocido como ECK) y hasta ahora todo va bien.

Sin embargo, me pregunto cuál es el patrón correcto para configurar Kibana y Elasticsearch con el módulo de Apache.

Sé que puedo hacerlo ad hoc con:

filebeat setup --modules apache2 --strict.perms=false \
  --dashboards --pipelines --template \
  -E setup.kibana.host="${KIBANA_URL}"

Pero ¿cuál es la forma automatizada de hacerlo? Veo algunos documentos para la parte del tablero de Kibana en https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-beat-configuration.html#k8s-beat-set-up-kibana-dashboards pero ¿y el resto (pipelines, etc.)?

Nota: En algún momento, es posible que termine ejecutando realmente un Beat para el clúster de K8s, pero todavía no estoy en esa etapa. En este momento, solo quiero configurar Elasticsearch/Kibana con las adiciones del módulo de Apache para que los Filebeats de los servicios externos de Apache se puedan ingesar/mostrar correctamente.

Por cierto, estoy utilizando la versión 6.8 del conjunto Elastic por ahora.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para automatizar la configuración de Kibana y Elasticsearch con el módulo de Apache, puedes utilizar los archivos de configuración proporcionados por Elastic. Estos archivos especifican las configuraciones para filebeat, Elasticsearch y Kibana para permitir la ingestión y visualización de los registros de Apache.

    Aquí tienes los pasos para automatizar la configuración:

    1. Crea un ConfigMap en Kubernetes que contenga las configuraciones de filebeat:
    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: filebeat-config
    data:
      filebeat.yml: |
        filebeat.inputs:
        - type: log
          enabled: true
          paths:
            - /var/log/apache2/*.log
    
        processors:
          - add_cloud_metadata:
    
        output.elasticsearch:
          hosts: ['${ELASTICSEARCH_HOST:elasticsearch.elasticsearch.svc.cluster.local}:${ELASTICSEARCH_PORT:9200}']
          username: ${ELASTICSEARCH_USERNAME}
          password: ${ELASTICSEARCH_PASSWORD}
    
        setup.kibana:
          host: '${KIBANA_URL}'
    
        setup.dashboards.enabled: true
    
        setup.dashboards.directory: /usr/share/filebeat/kibana/
    
        setup.template.enabled: true
    
        setup.template.name: "filebeat"
    
        setup.template.pattern: "filebeat-*"
    
        setup.ilm.enabled: false
    
    1. Crea un despliegue de Kubernetes para Filebeat y adjunta el ConfigMap al despliegue:
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: filebeat
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: filebeat
      template:
        metadata:
          labels:
            app: filebeat
        spec:
          containers:
          - name: filebeat
            image: docker.elastic.co/beats/filebeat:6.8.0
            args: [
              "-c", "/etc/filebeat.yml",
              "-e",
            ]
            env:
            - name: ELASTICSEARCH_HOST
              valueFrom:
                configMapKeyRef:
                  name: elasticsearch-config
                  key: elasticsearch_host
            - name: ELASTICSEARCH_PORT
              valueFrom:
                configMapKeyRef:
                  name: elasticsearch-config
                  key: elasticsearch_port
            - name: ELASTICSEARCH_USERNAME
              valueFrom:
                secretKeyRef:
                  name: elasticsearch-secret
                  key: username
            - name: ELASTICSEARCH_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: elasticsearch-secret
                  key: password
            - name: KIBANA_URL
              value: http://kibana:5601
            volumeMounts:
            - name: config
              mountPath: /etc/filebeat.yml
              subPath: filebeat.yml
          volumes:
          - name: config
            configMap:
              name: filebeat-config
    
    1. Crea un servicio de Kubernetes para Filebeat:
    apiVersion: v1
    kind: Service
    metadata:
      name: filebeat
    spec:
      selector:
        app: filebeat
      ports:
        - name: http
          targetPort: 5066
          port: 80
    
    1. Configura Elasticsearch y Kibana para procesar los registros de Apache utilizando el pipeline del Nodo de Ingestión de Elasticsearch:
    PUT _ingest/pipeline/apache-access-pipeline
    {
      "description": "Pipeline para analizar los registros de acceso de Apache",
      "processors": [
        {
          "grok": {
            "field": "message",
            "patterns": [
              "%{COMBINEDAPACHELOG}"
            ]
          }
        },
        {
          "rename": {
            "fields": {
              "verb": "request_method",
              "request": "request_url",
              "httpversion": "http_version",
              "response": "response_code",
              "bytes": "response_size",
              "referrer": "referer"
            },
            "ignore_missing": true
          }
        },
        {
          "remove": {
            "field": "message"
          }
        }
      ]
    }
    
    PUT _ingest/pipeline/apache-error-pipeline
    {
      "description": "Pipeline para analizar los registros de error de Apache",
      "processors": [
        {
          "grok": {
            "field": "message",
            "patterns": [
              "%{APACHE_ERROR_LOG}"
            ]
          }
        },
        {
          "remove": {
            "field": "message"
          }
        }
      ]
    }
    
    PUT _index_template/filebeat
    {
      "index_patterns": ["filebeat-*"],
      "settings": {
        "number_of_shards": 1
      },
      "mappings": {
        "dynamic_templates": [
          {
            "strings_as_keywords": {
              "match_mapping_type": "string",
              "mapping": {
                "type": "keyword"
              }
            }
          }
        ]
      }
    }
    
    PUT _kibana/config/6.8.0
    {
      "defaultIndex": "filebeat-*"
    }
    
    1. Verifica que los registros sean ingestados comprobando el panel de control de Kibana.

    Con estos pasos, puedes automatizar la configuración de Kibana y Elasticsearch con el módulo de Apache utilizando un ConfigMap, un Despliegue y un Servicio. También tienes la opción de utilizar el pipeline del Nodo de Ingestión de Elasticsearch para analizar los registros y configurar la plantilla de índice utilizada por Filebeat.

Comments are closed.