使用 Splunk Connect 在 Anthos 上收集日志

本教程介绍如何安装和使用 Splunk Connect for Kubernetes,以从在 Google Cloud 中 Anthos 上运行的 Kubernetes 应用收集日志。利用 Anthos,您可以充分利用现有的本地投资或公有云中的 Kubernetes 和云技术。通过经 Google 验证、简单快速且易于管理的安装和升级,您可获享 Google Kubernetes Engine (GKE) 的卓越体验。Splunk Connect 可以在本地编制、存储和分析您的日志,如下图所示:

在 VMware 上部署的使用 Splunk 的 Anthos 日志记录架构

本教程适用于设置从 Anthos 到 Splunk 的日志和指标集成的管理员。在本教程中,您需要为 Splunk 企业版配置 HTTP Event Collector、在 Anthos 集群中部署 Splunk Connect for Kubernetes 并部署一个示例应用。

本教程假定您熟悉 Kubernetes,并且还满足以下技术要求:

  • 您是 Anthos 客户或参与 Anthos 免费试用计划。
  • 您之前配置了一个拥有正在运行的用户集群的 Anthos 安装。
  • 您当前在组织中运行本地 Splunk 企业版(7.0 或更高版本)。

如果您在 Google Cloud 或其他公有云上运行 Anthos 并希望连接到在本地运行的 Splunk 实例,则需要设置两种环境之间的混合连接,如下图所示:

在 Google Cloud 或其他公有云上使用 Splunk 的 Anthos 日志记录架构

目标

  • 安装并使用 Splunk Connect for Kubernetes 从在 Google Cloud 中 Anthos 上运行的 Kubernetes 应用收集日志。
  • 为 Splunk 企业版配置 HTTP Event Collector。
  • 在您的 Anthos 集群中部署 Splunk Connect for Kubernetes。
  • 部署一个示例应用。

费用

本教程使用 Google Cloud 的以下收费组件:

您可使用价格计算器根据您的预计使用量来估算费用。 Google Cloud 新用户可能有资格申请免费试用

准备工作

  1. 登录您的 Google 帐号。

    如果您还没有 Google 帐号,请注册一个新帐号

  2. 在 Cloud Console 的项目选择器页面上,选择或创建 Cloud 项目。

    转到项目选择器页面

  3. 确保您的 Google Cloud 项目已启用结算功能。 了解如何确认您的项目已启用结算功能

  4. 确保您已部署并配置了 Splunk。请参阅 Splunk 入门并部署 Splunk 企业版。
  5. 确保您已在 Google Cloud Console 中部署并注册了 Anthos 用户集群。本教程假定集群中有三个节点,但这不是强制性要求。按照 Anthos 文档部署此 Anthos 组件。
  6. 确保您的 Anthos 集群和 Splunk 之间有网络连接。

配置 Splunk 企业版

设置索引

Splunk Connect 至少需要两个索引来导出数据:一个用于事件,一个用于指标。在本教程中,您还将为对象创建一个单独的事件索引,因此总共三个索引。

  1. 以管理员身份登录 Splunk。
  2. 转到设置 > 索引
  3. 点击新建索引
    1. 索引名称文本框中,输入 events
    2. 索引数据类型设置为事件
  4. 点击保存
  5. 点击新建索引
    1. 索引名称文本框中,输入 objects
    2. 索引数据类型设置为事件
  6. 点击保存
  7. 点击新建索引
    1. 索引名称文本框中,输入 metrics
    2. 索引数据类型设置为指标
  8. 点击保存

设置 HTTP Event Collector (HEC)

要将日志和指标从 Anthos 导出到 Splunk,您需要设置 Splunk HTTP Event Collector (HEC)

  1. 转到设置 > 数据输入
  2. 点击全局设置
    1. 所有令牌设置为已启用
    2. 选择启用 SSL
    3. 点击保存
  3. HTTP Event Collector 对话框中,选择 +新增
  4. 名称文本框中输入 anthos-hec,然后选择下一步
  5. 输入设置对话框中,执行以下操作:
    1. 应用上下文设置为搜索和报告(搜索)
    2. 选择允许的索引菜单中,选择事件指标对象
    3. 点击下一步
  6. 此时会显示审核页面。检查该页面是否如下所示:

    HEC Collector 的审核页面。

  7. 点击提交创建 HEC。复制生成的令牌值以供稍后使用。

  8. 要检查连接情况,请登录 Anthos 集群中的节点并向 Splunk 发送测试事件。将 hec-token 替换为之前创建的令牌值,并将 splunk-ip 替换为您的 Splunk 企业版服务器的 IP,如以下代码所示:

    curl -k http://splunk-ip:8088/services/collector/event \
    -H "Authorization: Splunk hec-token" -d '{"event": "hello splunk"}'
    

    如果请求成功,则服务器会返回如下所示的响应:

    {"text":"Success","code":0}
    

部署 Splunk Connect for Kubernetes

要部署 Splunk Connect for Kubernetes,您需要创建 Splunk 服务帐号、安装 Helm 并部署 Splunk Connect。

以管理员身份登录 Anthos 用户集群

  • 在您的 Anthos 管理员工作站的 Shell 中,确保您的 kubectl 工具已配置为默认指向您的 Anthos 集群:
  • kubectl config current-context
  • 上述命令会返回 Anthos 集群。如果没有返回,请将主 kubeconfig 文件链接到本地配置文件,然后重试:
  • mkdir .kube
    ln -s /kubeconfig ~/.kube/config
    

安装 Helm

您可以使用 Helm 软件包管理器安装 Splunk Connect。

  1. 安装 Helm 客户端并确保 Helm 位于路径中:

    helm version
    

    输出类似于以下内容,但版本号和提交号可能有所不同:

    version.BuildInfo{Version:"v3.2.3", GitCommit:"8f832046e258e2cb800894579b1b3b50c2d83492", GitTreeState:"clean", GoVersion:"go1.13.12"}
    

部署 Splunk Connect

  1. 创建一个 Splunk 命名空间。此命名空间用于将 Splunk Connect 与您的其他集群隔离:

    kubectl create namespace splunk
    
  1. 创建一个包含 Splunk Connect 配置的 YAML 文件,以读取日志、对象和指标。将 hec-token 替换为之前创建的令牌值,并将 splunk-ip 替换为您的 Splunk 企业版服务器的 IP 地址:

    cat <<EOF >values.yaml
    global:
      splunk:
        hec:
          protocol: https
          insecureSSL: true
          token: hec-token
          host: splunk-ip
          port: 8088
          indexName: events
    
    splunk-kubernetes-logging:
      journalLogPath: /run/log/journal
      splunk:
        hec:
          indexName: events
    
    splunk-kubernetes-objects:
      objects:
        core:
          v1:
            - name: pods
            - name: namespaces
            - name: nodes
            - name: services
            - name: config_maps
            - name: persistent_volumes
            - name: service_accounts
            - name: persistent_volume_claims
            - name: resource_quotas
            - name: component_statuses
            - name: events
              mode: watch
        apps:
          v1:
            - name: deployments
            - name: daemon_sets
            - name: replica_sets
            - name: stateful_sets
      splunk:
        hec:
          indexName: objects
    
    splunk-kubernetes-metrics:
      kubernetes:
        insecureSSL: true
      splunk:
        hec:
          indexName: metrics
    EOF
    
  2. 将 Splunk Connect for Kubernetes 安装到 splunk 命名空间:

    helm install anthos-splunk -f values.yaml --namespace splunk \
    https://github.com/splunk/splunk-connect-for-kubernetes/releases/downlo
    ad/1.4.1/splunk-connect-for-kubernetes-1.4.1.tgz
    
  3. 检查 Splunk Connect 是否成功启动:

    kubectl -n splunk get pods
    

    您应该会看到 3 个日志记录 Pod、3 个指标 Pod、1 个指标聚合器 Pod 以及 1 个正在运行的对象 Pod,如下所示:

    NAME                                                          READY   STATUS    RESTARTS   AGE
    anthos-splunk-splunk-kubernetes-logging-46srr                  1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-logging-gkgkm                  1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-logging-r52nz                  1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-metrics-agg-595946f874-vjzmb   1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-metrics-gbkb8                  1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-metrics-k6ksn                  1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-metrics-vg5wn                  1/1     Running   0          2m
    anthos-splunk-splunk-kubernetes-objects-7c5cd8cf7d-csvw6       1/1     Running   0          2m
    
  4. 在 Splunk 界面中转到设置 > 索引。如果连接成功,最新事件列会显示最新的 eventsmetricsobjects 索引时间。

问题排查和进行更改

  • 如果 Pod 未启动或数据没有进入,请检查 Pod 日志中是否存在错误:

    kubectl -n splunk logs pod-name
    
  • 如果您需要更新 config.yaml 文件并重试,请运行以下命令以重新部署 Splunk Connect 并重新创建其 pod:

    helm upgrade --namespace splunk -f values.yaml anthos-splunk \
    https://github.com/splunk/splunk-connect-for-kubernetes/releases/downlo
    ad/1.4.1/splunk-connect-for-kubernetes-1.4.1.tgz
    kubectl delete pods -n splunk --all
    

部署和测试一个示例应用

接下来,您将部署一个示例应用,并在 Splunk 中查看其日志、元数据和指标。

部署一个示例应用

  1. 在 Anthos 上部署简单的“Hello World”应用

    kubectl create deployment hello-kubernetes --image=paulbouwer/hello-kubernetes:1.5
    
  2. 在端口 8080 上公开该应用并进行端口转发,以便在本地访问该应用:

    kubectl expose deployment hello-kubernetes --port=8080 --type=ClusterIP
    kubectl port-forward deployment/hello-kubernetes 8080:8080
    
  3. 使用 curl 命令行工具测试应用:

    curl http://localhost:8080/
    

    如果请求成功,则服务器会返回如下所示的响应:

      <!DOCTYPE html>
      <html>
      <head>
          <title>Hello Kubernetes!</title>
      [...]
    

查看应用日志

  • 转到 Splunk 网页界面中的搜索,并 在events 索引中搜索示例应用的日志:

    index=events sourcetype="kube:container:hello-kubernetes"
    

    此搜索按反向时间顺序(最新的第一个)返回日志事件,从测试请求开始,以及指示应用正在侦听并准备服务的条目,如以下屏幕截图所示:

    日志事件条目。

查看应用元数据

  • 搜索窗格中,搜索示例应用的元数据对象:

    index="objects" "hello-kubernetes"
    

    此搜索会返回各个 Kubernetes 对象的元数据快照的列表。例如,通过选择 sourcetype="kube:objects:deployments" 并展开 metadatastatus,您可以查看特定时间点的 hello-kubernetes 部署的状态,包括可用副本的数量,如以下屏幕截图所示:

    Kubernetes 对象的元数据快照。

    默认情况下,每 15 分钟轮询一次元数据。可以通过 values.yaml 文件中的时间间隔设置进行调整。

    元数据还包括来自 Kubernetes API 的事件流。以下搜索会返回示例应用的所有事件:

    index="objects" sourcetype="kube:objects:events*" "hello-kubernetes"
    

查看系统和应用指标

  1. 转到 Splunk 界面中的指标,在搜索框中输入 cpu

  2. 在下拉菜单中,选择指标 > kube > 命名空间 > cpu > 用量

  3. 在右侧的分析窗格中,选择拆分方式,然后选择名称。您将看到按命名空间分类的 CPU 用量图,如以下屏幕截图所示:

    CPU 用量图

部署 Splunk App for Infrastructure

借助 Splunk App for Infrastructure (SAI),您可以深入了解 Linux 服务器、Microsoft Windows 服务器、Kubernetes 集群、OpenShift 容器、Docker 容器以及 Amazon EC2、ELB 和 EBS 实例的性能。SAI 使用指标来监控性能,并使用日志数据来深入了解服务器基础架构和进行问题排查。

如需与 Splunk App for Infrastructure 中提供的功能完全兼容的简化设置安装,请在您的 Splunk 环境中同时安装 Splunk Add-on for Infrastructure 和 Splunk App for Infrastructure。然后,按照这些步骤生成安装脚本,以生成用于配置向 Splunk 传送数据的安装脚本。

清理

为避免因本教程中使用的资源导致您的 Google Cloud Platform 帐号产生费用,请执行以下操作:

删除 Cloud 项目

若要避免产生费用,最简单的方法是删除您为本教程创建的 Cloud 项目。

  1. 在 Cloud Console 中,转到管理资源页面。

    转到“管理资源”页面

  2. 在项目列表中,选择要删除的项目,然后点击删除
  3. 在对话框中输入项目 ID,然后点击关闭以删除项目。

删除资源

在完成本教程后,请运行以下命令删除已创建的资源:

   helm delete --namespace splunk anthos-splunk
   kubectl delete deployment hello-kubernetes

后续步骤