【问题标题】:Installing Logstash on Kubernetes and Sending logs to AWS ElasticSearch在 Kubernetes 上安装 Logstash 并将日志发送到 AWS ElasticSearch
【发布时间】:2019-08-27 13:25:55
【问题描述】:

我正在尝试通过 AWS elasticsearch 为在 Kubernetes 上运行的应用程序设置监控解决方案。

为了发送日志,我使用的是 filebeat --> Logstash --> AWS ElasticSearch,到目前为止它被证明是一场噩梦:(

要从 logstash 发送日志,我需要使用 amazon_es 输出插件,但我遇到了不同的错误

下面是我正在使用的 logstash 的清单文件

kind: ConfigMap
metadata:
  name: logstash-configmap
  namespace: kube-system
data:
  logstash.yml: |
    http.host: "0.0.0.0"
    path.config: /usr/share/logstash/pipeline
  logstash.conf: |
    # all input will come from filebeat, no local logs
    input {
      beats {
        port => 5044
      }
    }
    filter {
      if [message] =~ /^\{.*\}$/ {
        json {
          source => "message"
        }
      }
      if [ClientHost] {
        geoip {
          source => "ClientHost"
        }
      }
    }
    output {
        amazon_es {
            hosts => [ "https://vpc-eks***********.es.amazonaws.com:443" ]
            region => "eu-west-1"
            index => "devtest-logs-%{+YYYY.MM.dd}"            
        }
    }
---
apiVersion: apps/v1beta1
kind: Deployment
metadata:
  name: logstash-deployment
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        app: logstash
    spec:
      containers:
      - name: logstash
        image: docker.elastic.co/logstash/logstash:7.1.0
        ports:
        - containerPort: 5044
        volumeMounts:
          - name: config-volume
            mountPath: /usr/share/logstash/config
          - name: logstash-pipeline-volume
            mountPath: /usr/share/logstash/pipeline
      volumes:
      - name: config-volume
        configMap:
          name: logstash-configmap
          items:
            - key: logstash.yml
              path: logstash.yml
      - name: logstash-pipeline-volume
        configMap:
          name: logstash-configmap
          items:
            - key: logstash.conf
              path: logstash.conf
---
kind: Service
apiVersion: v1
metadata:
  name: logstash-service
  namespace: kube-system
spec:
  selector:
    app: logstash
  ports:
  - protocol: TCP
    port: 5044
    targetPort: 5044
  type: ClusterIP
│ [INFO ] 2019-08-27 13:20:50.114 [LogStash::Runner] agent - No persistent UUID file found. Generating new UUID {:uuid=>"fb22e6cb-d7bb-4735-a05a-da4a2e4dabde", :path=>"/usr/share/logstash/data/uuid"}                              │
│ [ERROR] 2019-08-27 13:20:55.290 [Converge PipelineAction::Create<main>] registry - Tried to load a plugin's code, but failed. {:exception=>#<LoadError: no such file to load -- logstash/outputs/amazon_es>, :path=>"logstash/outp │
│ uts/amazon_es", :type=>"output", :name=>"amazon_es"}                                                                                                                                                                               │
│ [ERROR] 2019-08-27 13:20:55.295 [Converge PipelineAction::Create<main>] agent - Failed to execute action {:action=>LogStash::PipelineAction::Create/pipeline_id:main, :exception=>"LogStash::PluginLoadingError", :message=>"Could │
│ n't find any output plugin named 'amazon_es'. Are you sure this is correct? Trying to load the amazon_es output plugin resulted in this error: no such file to load -- logstash/outputs/amazon_es", :backtrace=>["/usr/share/logst │
│ ash/logstash-core/lib/logstash/plugins/registry.rb:211:in `lookup_pipeline_plugin'", "/usr/share/logstash/logstash-core/lib/logstash/plugin.rb:137:in `lookup'", "org/logstash/plugins/PluginFactoryExt.java:200:in `plugin'", "or │
│ g/logstash/plugins/PluginFactoryExt.java:137:in `buildOutput'", "org/logstash/execution/JavaBasePipelineExt.java:50:in `initialize'", "/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:23:in `initialize'", "/usr/ │
│ share/logstash/logstash-core/lib/logstash/pipeline_action/create.rb:36:in `execute'", "/usr/share/logstash/logstash-core/lib/logstash/agent.rb:325:in `block in converge_state'"]} 

到目前为止,当容器进入崩溃循环时,我还没有找到任何东西。任何帮助都会很棒

【问题讨论】:

  • 请为您的工作负载发布清单。如果您这样做,可能会有更多人可以帮助您。
  • 尝试将 filebeat 直接连接到 AWS ES,但也失败了 │ 2019-08-27T13:49:25.454Z ERROR pipeline/output.go:100 Failed to connect to backoff(elasticsearch(https://vpc-eks-devtest-oqr3xrffk2kw7rlxpxmw4c2vme.eu-west-1.es.amazonaws.com:443)): Connection marked as failed because │ │ the onConnect callback failed: cannot retrieve the elasticsearch license: unauthorized access, could not connect to the xpack endpoint, verify your credentials

标签: elasticsearch kubernetes logstash amazon


【解决方案1】:

您需要安装 amazon_es 插件来解决此问题。

将其包含在您的 dockerfile 中。

RUN logstash-plugin install logstash-output-amazon_es

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2017-02-19
    • 2016-10-30
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 2021-03-18
    相关资源
    最近更新 更多