集群的日志记录
在 IBM Cloud® Kubernetes Service 中设置日志记录,以帮助您排除故障,改善 Kubernetes 集群和应用程序的健康状况和性能。
持续监视和日志记录是检测对集群的攻击并在发生问题时进行故障诊断的关键。 通过持续监视集群,可以更好地了解集群容量以及可供应用程序使用的资源的可用性。 根据此洞察,您可以做好准备以避免应用程序发生中断。
选择日志记录解决方案
默认情况下,以下所有 IBM Cloud Kubernetes Service 群集组件都会在本地生成和写入日志:工作节点、容器、应用程序、持久存储、Ingress 应用程序负载平衡器、Kubernetes API 和 kube-system
命名空间。 有多个日志记录解决方案可用于收集、转发和查看这些日志。
- IBM Cloud Logs
- 通过部署 IBM Cloud Logs Kubernetes Service为集群配置该实例,来管理pod容器日志。 日志代理会从所有命名空间(包括
kube-system
)收集扩展名为*.log
的日志和存储在 pod 的/var/log
目录中的无扩展文件。 然后,代理会将日志转发到您的服务实例。 您还可以跟踪集群中用户发起的管理活动 Kubernetes Service 会自动生成集群管理事件,并将这些事件日志转发到 IBM Cloud Logs。 有关更多信息,请参阅 IBM Cloud Logs 入门。 要将日志记录代理部署到集群,请参阅 管理 Red Hat OpenShift on IBM Cloud 集群的日志记录代理 或 管理 IBM Cloud Kubernetes Service 集群的日志记录代理。 - 将 Fluentd 用于外部服务器
- 要收集、转发和查看集群组件的日志,可以使用 Fluentd 来创建日志记录配置。 创建日志配置时,群集组件会 Fluentd 集群组件会从指定来源的路径收集日志。 Fluentd 然后可以将这些日志转发到接受 协议的外部服务器。
syslog
首先,请参阅“了解转发至外部服务器的日志”。
将日志记录和监控代理迁移到云日志
不再支持可观察性 CLI 插件 ibmcloud ob
和 v2/observe
端点。 目前还没有直接替代方案,但您现在可以通过控制台或 Helm 图表管理日志记录和监控集成。 有关最新步骤,请参阅 管理 IBM Cloud Kubernetes Service 集群的日志记录代理 和 使用 Kubernetes 监控代理。
您不能再使用 ob
插件、Terraform或API在集群上安装可观察性代理或修改现有配置。 Sysdig代理继续将指标发送到指定的 IBM Cloud Monitoring 实例。 LogDNA 代理无法再发送日志,因为 已被 Logs取代。IBM Cloud Log Analysis IBM Cloud
移除可观察性插件代理
-
ob plugin
支持结束后,您必须逐个删除每个组件。- 清理守护进程和配置文件。
kubectl delete daemonset logdna-agent -n ibm-observe kubectl delete daemonset sysdig-agent -n ibm-observe kubectl delete configmap <logdna-configmap> -n ibm-observe kubectl delete configmap <sysdig-configmap> -n ibm-observe
- 可选:删除命名空间。 在命名空间中没有其他资源可用之后。
kubectl delete namespace ibm-observe
- 清理守护进程和配置文件。
移除插件后,使用集群仪表板、Terraform或手动在集群中重新安装日志记录和监控代理。
有关更多信息,请参阅以下链接:
将集群和应用程序日志转发到外部服务器
配置将 IBM Cloud Kubernetes Service 标准集群的日志转发到外部服务器。
了解如何将日志转发到外部服务器
为集群中的源创建日志记录配置以转发到外部服务器时,将在集群中创建 Fluentd 组件。 Fluentd 从该源的路径收集日志,并将日志转发到外部服务器。 系统会对摄入端口上从源到日志记录服务的流量进行加密。
- 我可以为哪些来源配置日志转发?
- 在下图中,您可以看到可以配置日志记录的源区域。
-
worker
:特定于工作程序节点基础架构配置的信息。 工作日志通过syslog
捕捉,包含操作系统事件。 在auth.log
中,可以找到有关对操作系统发出的认证请求的信息。路径
/var/log/syslog
/var/log/auth.log
-
container
: 路径:运行中的容器记录的信息:写入STDOUT
或STDERR
的任何内容。 -
application
:有关在应用程序级别发生的事件的信息。 这可能是发生事件的通知,如成功登录、有关存储的警告或其他可在应用程序级别执行的操作 : 您可以设置日志转发的路径。 不过,要发送日志,必须在日志配置中使用绝对路径,否则无法读取日志。 如果您的路径已挂载到工作节点,则可能已创建了一个符号链接。 举例说明:如果指定的路径是/usr/local/spark/work/app-0546/0/stderr
,但日志实际流向/usr/local/spark-1.0-hadoop-1.2/work/app-0546/0/stderr
,则无法读取日志。 -
storage
:有关集群中设置的持久性存储器的信息。 存储器日志可以帮助您将问题确定仪表板和警报设置为 DevOps 管道和生产发布的一部分。 注:路径/var/log/kubelet.log
和/var/log/syslog
也包含存储器日志,但这些路径中的日志由kubernetes
和worker
日志源进行收集。- 路径
-
/var/log/ibmc-s3fs.log
/var/log/ibmc-block.log
- Pod **
-
portworx-***
ibmcloud-block-storage-attacher-***
ibmcloud-block-storage-driver-***
ibmcloud-block-storage-plugin-***
ibmcloud-object-storage-plugin-***
-
kubernetes
:来自在工作程序节点的 kube-system 名称空间中所发生的 kubelet、kube-proxy 和其他 Kubernetes 事件的信息。- 路径
-
/var/log/kubelet.log
/var/log/kube-proxy.log
/var/log/event-exporter/1..log
-
ingress
:通过入口 ALB 进入群集的网络流量信息。- 路径
-
/var/log/alb/ids/*.log
/var/log/alb/ids/*.err
/var/log/alb/customerlogs/*.log
/var/log/alb/customerlogs/*.err
-
kube-audit
:有关发送到 Kubernetes API 服务器的集群相关操作的信息,包括时间、用户和受影响的资源。 可以使用 Webhook 配置kube-audit
源。 有关更多信息,请参阅 将 Kubernetes API 审计日志转发到外部服务器。
- 我有责任随时更新 Fluentd 吗?
- 要更改日志记录或过滤器配置,Fluentd 日志记录组件必须是最新版本。 缺省情况下,会启用附加组件的自动更新。 要禁用自动更新,请参阅更新集群组件:用于日志记录的 Fluentd。
- 能否从群集中的一个源转发某些日志,而不转发其他日志?
- 需要。 例如,如果您有一个通信特别频繁的 pod,您可能希望阻止该 pod 的日志占用日志存储空间,同时仍允许转发其他 pod 的日志。 要阻止转发特定 pod 的日志,请参阅过滤日志。
转发集群和应用程序日志
针对集群和应用程序日志记录创建配置。 您可以使用选项来区分不同的日志记录选项。
下表显示了配置日志记录时的不同选项及其描述。
参数 | 描述 |
---|---|
<cluster_name_or_ID> |
集群的名称或标识。 |
--logsource |
要从中转发日志的源。 接受的值为 container , application , worker , kubernetes , ingress 和 storage 。 该选项支持以逗号分隔的日志源列表,以应用于配置。 如果未提供日志源,则会为 container 和 ingress 日志源创建日志配置。 |
--type syslog |
syslog 将日志转发到外部服务器。 |
--namespace |
可选:要从中转发日志的 Kubernetes 名称空间。 ibm-system 和 kube-system Kubernetes 命名空间不支持日志转发。 此值仅对 container 日志源有效。 如果不指定名称空间,群集中的所有名称空间都会使用此配置。 |
--hostname |
指定日志收集器服务的主机名或 IP 地址。 |
--port |
数据获取端口。 如果没有指定端口,则使用标准端口 9091 。 对于 syslog,请指定日志收集器服务器的端口。 如果没有指定端口,则使用标准端口 514 。 |
--app-containers |
可选:要转发来自应用程序的日志,可以指定包含应用程序的容器的名称。 可以使用逗号分隔列表来指定多个容器。 如果没有指定容器,日志将从包含所提供路径的所有容器中转发。 |
--app-paths |
容器上应用程序要将日志记录到的路径。 要转发源类型为 application 的日志,必须提供一个路径。 要指定多个路径,请使用逗号分隔列表; 例如,/var/log/myApp1/*,/var/log/myApp2/* |
--syslog-protocol |
当日志类型为 syslog< 时,传输层协议。 可以使用以下协议:udp 、tls 或 tcp 。 使用 udp 协议转发到 rsyslog 服务器时,超过 1KB 的日志会被截断。 |
--ca-cert |
必须填写:当日志类型为 syslog 和协议为 tls 时,包含证书颁发机构证书的 Kubernetes 密名。 |
--verify-mode |
当记录类型为 syslog 且协议为 tls 时,验证模式为。 支持的值为 verify-peer 和默认值 verify-none 。 |
--skip-validation |
可选:跳过对指定组织和空间名称的验证。 跳过验证可减少处理时间,但无效的日志记录配置将无法正确转发日志。 |
通过 udp
或 tcp
协议将日志转发到自己的服务器上
-
- 设置一个服务器,以两种方式之一接受
syslog
协议: -
设置和管理您自己的服务器,或者让提供者为您管理服务器。 如果提供者为您管理服务器,请从日志记录提供者获取日志记录端点。
-
从容器中运行
syslog
。 例如,您可以使用此 部署.yaml 文件获取在群集中运行容器的 Docker 公共映像。 该映像在公共集群 IP 地址上发布端口514
,并使用此公共集群 IP 地址来配置 syslog 主机。
通过移除
syslog
前缀,您可以看到有效 JSON 格式的日志。 为此,请在rsyslog
服务器运行的etc/rsyslog.conf
文件开头添加以下代码:$template customFormat,"%msg%\n"$ActionFileDefaultTemplate customFormat
- 设置一个服务器,以两种方式之一接受
-
创建日志转发配置。 有关参数的更多信息,请参阅 了解日志记录配置选项表。
ibmcloud ks logging config create --cluster <cluster_name_or_ID> --logsource <log_source> --namespace <kubernetes_namespace> --hostname <log_server_hostname_or_IP> --port <log_server_port> --type syslog --app-containers <container1,2> --app-paths <paths_to_logs> --syslog-protocol <protocol> --skip-validation
通过 tls
协议将日志转发到自己的服务器上
-
确保您具有以下 IBM Cloud IAM 角色:
- 群集的编辑器或管理员平台访问角色
- 编写者或经理服务访问角色
kube-system
命名空间
-
设置一个服务器,以两种方式之一接受
syslog
协议:-
设置和管理您自己的服务器,或者让提供者为您管理服务器。 如果提供者为您管理服务器,请从日志记录提供者获取日志记录端点。
-
从容器中运行
syslog
。 例如,您可以使用此 部署.yaml 文件获取在群集中运行容器的 Docker 公共映像。 映像会在公共群集 IP 地址上发布端口514
,并使用此公共群集 IP 地址配置syslog
主机。 您需要注入相关认证中心和服务器端证书,并更新syslog.conf
以在服务器上启用tls
。
-
-
将认证中心证书保存到名为
ca-cert
的文件。 必须是那个确切的名字。 -
在
kube-system
名称空间中为ca-cert
文件创建私钥。 创建日志配置时,请使用--ca-cert
选项的密名。kubectl -n kube-system create secret generic --from-file=ca-cert
-
创建日志转发配置。 有关参数的更多信息,请参阅 了解日志记录配置选项表。
ibmcloud ks logging config create --cluster <cluster name or id> --logsource <log source> --type syslog --syslog-protocol tls --hostname <ip address of syslog server> --port <port for syslog server, 514 is default> --ca-cert <secret name> --verify-mode <defaults to verify-none>
过滤转发的日志
可以通过过滤掉某段时间内的特定日志来选择要转发到外部服务器的日志。 您可以使用选项来区分不同的过滤选项。
参数 | 描述 |
---|---|
<cluster_name_or_ID> |
必需:要过滤其日志的集群的名称或标识。 |
<log_type> |
要应用过滤器的日志的类型。 目前支持 all 、container 和 host 。 |
<configs> |
可选:日志记录配置标识的逗号分隔列表。 如果未提供,过滤器将应用于传递给过滤器的所有群集日志记录配置。 您可以使用 --show-matching-configs 选项查看与筛选器匹配的日志配置。 |
<kubernetes_namespace> |
可选:要从中转发日志的 Kubernetes 名称空间。 该选项仅适用于使用日志类型 container 时。 |
<container_name> |
可选:要从中过滤日志的容器的名称。 |
<logging_level> |
可选:过滤掉处于指定级别及更低级别的日志。 可接受的值按其规范顺序排列为 fatal , error , warn/warning , info , debug 和 trace 。 例如,如果您过滤了 info 级别的日志,那么 debug ,和 trace 也会被过滤。 注意:只有当日志信息是 JSON 格式且包含级别字段时,才能使用此选项。 要以 JSON 格式显示消息,请在命令中添加 --output json 选项。 |
<message> |
可选:过滤掉包含编写为正则表达式的指定消息的日志。 |
<filter_ID> |
可选:日志过滤器的标识。 |
--show-matching-configs |
可选:显示每个过滤器应用于的日志记录配置。 |
--all |
可选:删除所有日志转发过滤器。 |
-
创建日志记录过滤器。
ibmcloud ks logging filter create --cluster <cluster_name_or_ID> --type <log_type> --logging-configs <configs> --namespace <kubernetes_namespace> --container <container_name> --level <logging_level> --regex-message <message>
-
查看创建的日志过滤器。
ibmcloud ks logging filter get --cluster <cluster_name_or_ID> --id <filter_ID> --show-matching-configs
-
更新创建的日志过滤器。
ibmcloud ks logging filter update --cluster <cluster_name_or_ID> --id <filter_ID> --type <server_type> --logging-configs <configs> --namespace <kubernetes_namespace --container <container_name> --level <logging_level> --regex-message <message>
-
删除创建的日志过滤器。
ibmcloud ks logging filter rm --cluster <cluster_name_or_ID> --id <filter_ID> [--all]
验证、更新和删除日志转发
验证日志转发
您可以通过以下两种方式之一来验证配置设置是否正确:
- 要列出群集中的所有日志记录配置:
ibmcloud ks logging config get --cluster <cluster_name_or_ID>
- 列出一种类型日志源的日志记录配置:
ibmcloud ks logging config get --cluster <cluster_name_or_ID> --logsource <source>
更新日志转发
您可以更新已创建的日志记录配置:
ibmcloud ks logging config update --cluster <cluster_name_or_ID> --id <log_config_id> --namespace <namespace> --type <server_type> --syslog-protocol <protocol> --logsource <source> --hostname <hostname_or_ingestion_URL> --port <port> --app-containers <container1,2> --app-paths <paths_to_logs>
删除日志转发
您可以通过删除群集的一个或所有日志配置来停止转发日志:
- 删除一个日志记录配置:
ibmcloud ks logging config rm --cluster <cluster_name_or_ID> --id <log_config_ID>
- 删除所有日志记录配置:
ibmcloud ks logging config rm --cluster <my_cluster> --all