本教程适用于设置从 Anthos 到 Splunk 的日志和指标集成的管理员。在本教程中,您需要为 Splunk 企业版配置 HTTP Event Collector、在 Anthos 集群中部署 Splunk Connect for Kubernetes 并部署一个示例应用。
本教程假定您熟悉 Kubernetes,并且还满足以下技术要求:
- 您是 Anthos 客户或参与 Anthos 免费试用计划。
- 您之前配置了一个拥有正在运行的用户集群的 Anthos 安装。
- 您当前在组织中运行本地 Splunk 企业版(7.0 或更高版本)。
如果您在 Google Cloud 或其他公有云上运行 Anthos 并希望连接到在本地运行的 Splunk 实例,则需要设置两种环境之间的混合连接,如下图所示:
目标
- 安装并使用 Splunk Connect for Kubernetes 从在 Google Cloud 中 Anthos 上运行的 Kubernetes 应用收集日志。
- 为 Splunk 企业版配置 HTTP Event Collector。
- 在您的 Anthos 集群中部署 Splunk Connect for Kubernetes。
- 部署一个示例应用。
费用
本教程使用 Google Cloud 的以下收费组件:
准备工作
-
登录您的 Google 帐号。
如果您还没有 Google 帐号,请注册新帐号。
-
在 Google Cloud Console 的项目选择器页面上,选择或创建一个 Google Cloud 项目。
-
确保您的 Cloud 项目已启用结算功能。 了解如何确认您的项目是否已启用结算功能。
- 确保您已部署并配置了 Splunk。请参阅 Splunk 入门并部署 Splunk 企业版。
- 确保您已在 Google Cloud Console 中部署并注册了 Anthos 用户集群。本教程假定集群中有三个节点,但这不是强制性要求。请按照 <a){: class="internal" l10n-attrs-original-order="href,track-type,track-name,track-metadata-position,class" l10n-encrypted-href="5sJAARSppr4HaNH1BtuwkKrAXps+HwB4ScCjD/HhErQ=" track-metadata-position="body" track-name="internalLink" track-type="tutorial">Anthos 文档来部署该 Anthos 组件。</a){:>
- 确保您的 Anthos 集群和 Splunk 之间有网络连接。
配置 Splunk 企业版
设置索引
Splunk Connect 至少需要两个索引来导出数据:一个用于事件,一个用于指标。在本教程中,您还将为对象创建一个单独的事件索引,因此总共三个索引。
- 以管理员身份登录 Splunk。
- 转到设置 > 索引。
- 点击新建索引。
- 在索引名称文本框中,输入
events
。 - 将索引数据类型设置为事件。
- 在索引名称文本框中,输入
- 点击保存。
- 点击新建索引。
- 在索引名称文本框中,输入
objects
。 - 将索引数据类型设置为事件。
- 在索引名称文本框中,输入
- 点击保存。
- 点击新建索引。
- 在索引名称文本框中,输入
metrics
。 - 将索引数据类型设置为指标。
- 在索引名称文本框中,输入
- 点击保存。
设置 HTTP Event Collector (HEC)
要将日志和指标从 Anthos 导出到 Splunk,您需要设置 Splunk HTTP Event Collector (HEC)。
- 转到设置 > 数据输入。
- 点击全局设置。
- 将所有令牌设置为已启用。
- 选择启用 SSL。
- 点击保存。
- 在 HTTP Event Collector 对话框中,选择 +新增。
- 在名称文本框中输入
anthos-hec
,然后选择下一步。 - 在输入设置对话框中,执行以下操作:
- 将应用上下文设置为搜索和报告(搜索)。
- 在选择允许的索引菜单中,选择事件、指标和对象。
- 点击下一步。
此时会显示审核页面。检查该页面是否如下所示:
点击提交创建 HEC。复制生成的令牌值以供稍后使用。
要检查连接情况,请登录 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 用户集群
- 从您的 <a){: class="internal" l10n-attrs-original-order="href,track-type,track-name,track-metadata-position,class" l10n-encrypted-href="3n2VH2e0y1LXIfd3j+mggAvyAjTuf51A7biwZZ2m1/Po/0ReIgt1WFs7y9l8ijRysP+liCKn/caImABTbV/e+g==" track-metadata-position="body" track-name="internalLink" track-type="tutorial">Anthos 管理员工作站的 Shell 中,确保您的
kubectl
工具已配置为默认指向您的 Anthos 集群:</a){:>
kubectl config current-context
kubeconfig
文件链接到本地配置文件,然后重试:mkdir .kube ln -s /kubeconfig ~/.kube/config
安装 Helm
您可以使用 Helm 软件包管理器安装 Splunk Connect。
安装 Helm 客户端并确保 Helm 位于路径中:
helm version
输出类似于以下内容,但版本号和提交号可能有所不同:
version.BuildInfo{Version:"v3.2.3", GitCommit:"8f832046e258e2cb800894579b1b3b50c2d83492", GitTreeState:"clean", GoVersion:"go1.13.12"}
部署 Splunk Connect
创建一个 Splunk 命名空间。此命名空间用于将 Splunk Connect 与您的其他集群隔离:
kubectl create namespace splunk
创建一个包含 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
将 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
检查 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
在 Splunk 界面中转到设置 > 索引。如果连接成功,最新事件列会显示最新的
events
、metrics
和objects
索引时间。
问题排查和进行更改
如果 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 中查看其日志、元数据和指标。
部署一个示例应用
在 Anthos 上部署简单的“Hello World”应用:
kubectl create deployment hello-kubernetes --image=paulbouwer/hello-kubernetes:1.5
在端口 8080 上公开该应用并进行端口转发,以便在本地访问该应用:
kubectl expose deployment hello-kubernetes --port=8080 --type=ClusterIP kubectl port-forward deployment/hello-kubernetes 8080:8080
使用
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"
并展开metadata
和status
,您可以查看特定时间点的hello-kubernetes
部署的状态,包括可用副本的数量,如以下屏幕截图所示:默认情况下,每 15 分钟轮询一次元数据。可以通过
values.yaml
文件中的时间间隔设置进行调整。元数据还包括来自 Kubernetes API 的事件流。以下搜索会返回示例应用的所有事件:
index="objects" sourcetype="kube:objects:events*" "hello-kubernetes"
查看系统和应用指标
转到 Splunk 界面中的指标,在搜索框中输入
cpu
。在下拉菜单中,选择指标 > kube > 命名空间 > 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 帐号产生费用,请删除包含这些资源的项目,或者保留项目但删除各个资源。
删除 Cloud 项目
若要避免产生费用,最简单的方法是删除您为本教程创建的 Cloud 项目。
- 在 Cloud Console 中,转到管理资源页面。
- 在项目列表中,选择要删除的项目,然后点击删除。
- 在对话框中输入项目 ID,然后点击关闭以删除项目。
删除资源
在完成本教程后,请运行以下命令删除已创建的资源:
helm delete --namespace splunk anthos-splunk
kubectl delete deployment hello-kubernetes
后续步骤
- 详细了解 Anthos
- 详细了解 Splunk 产品和解决方案:
- 试用其他 Google Cloud 功能。查阅我们的教程。