kubernetes - 如何将日志从运行在 GCP 之上的 Kubernetes 上的 pod 发送到 elasticsearch/logstash?

标签 kubernetes google-cloud-platform fluent google-kubernetes-engine

我在 Google-Container-Engine 中运行我系统的新模块。我想将 stdout 和 stderr 从它们(在 pod 中运行)带到我的集中式 logstash。有没有一种简单的方法可以将日志从 pod 转发到外部日志服务,例如 logstash 或 elasticsearch?

最佳答案

我决定直接登录到elasticsearch,一个可以在elasticsearch.c.my-project.internal访问的外部虚拟机(我在谷歌云平台上)。这很容易:

  • 设置一个名为 elasticsearch 的 ExternalService 指向 elasticsearch 实例:
    apiVersion: v1
    kind: Service
    metadata:
      name: elasticsearch-logging
      namespace: kube-system
      labels:
        k8s-app: elasticsearch
        kubernetes.io/name: "elasticsearch"
    spec:
      type: ExternalName
      externalName: elasticsearch.c.my-project.internal
      ports:
        - port: 9200
          targetPort: 9200
    
  • 将 fluentd-elasticsearch 部署为 DeamonSet。 fluentd-elasticsearch 将自动连接到名称为 elasticsearch-logging 的服务(基于 fluentd-elasticsearch deployment defintion :
    apiVersion: extensions/v1beta1
    kind: DaemonSet
    metadata:
      name: fluentd-elasticsearch
      namespace: kube-system
      labels:
        tier: monitoring
        app: fluentd-logging
        k8s-app: fluentd-logging
    spec:
      template:
        metadata:
          labels:
            name: fluentd-elasticsearch
        spec:
          containers:
            - name: fluentd-elasticsearch
              image: gcr.io/google_containers/fluentd-elasticsearch:1.19
              volumeMounts:
              - name: varlog
                mountPath: /var/log
              - name: varlibdockercontainers
                mountPath: /var/lib/docker/containers
                readOnly: true
          terminationGracePeriodSeconds: 30
          volumes:
          - name: varlog
            hostPath:
              path: /var/log
          - name: varlibdockercontainers
            hostPath:
              path: /var/lib/docker/containers
    

  • 使用kubectl logs fluentd-elasticsearch-...检查您是否能够连接到 elasticsearach 实例。
  • 现在,您可以访问 kibana 并查看日志。
  • 关于kubernetes - 如何将日志从运行在 GCP 之上的 Kubernetes 上的 pod 发送到 elasticsearch/logstash?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39973548/

    相关文章:

    c# - 如何设计流畅的异步操作?

    c# - Builder模式从数据库值而不是参数输入构造对象是否合适

    asp.net - 有人知道使用 ASP.NET MVC1 或 MVC2、NHibernate、Fluent NHibernate 和 CaSTLe 的可靠 Web 示例吗?

    kubernetes - 运行rabbitmq-peer-discovery-k8s会抛出套接字错误

    apache-spark - Kubernetes 上 Spark 应用程序的 Numpy 和其他库依赖项

    google-cloud-platform - 为什么我的Container Builder构建失败并显示“执行构建步骤后找不到一个或多个图像”

    goapp serve : not working, 'goapp' 不被识别为内部或外部命令

    javascript - GAE 上的 NextJS - 错误 : EROFS: read-only file system

    java - 如何使用 Kubernetes Azure 和 AWS SDK for java 部署应用程序

    amazon-web-services - 如何使用 AWS 云 Controller 管理器