日志采集

本文介绍如何在 k8s 集群中为 PolarDB-X 数据库开启日志采集功能。

采集内容

计算节点的日志

日志 Pod内路径 是否进行了解析
SQL日志 /home/admin/drds-server/logs/*/sql.log
慢日志 /home/admin/drds-server/logs/*/slow.log
错误日志 /home/admin/drds-server/logs/*/tddl.log

容器内路径中的*表示任意目录名

数据节点的日志

日志 Pod内路径 是否进行了解析
审计日志 /data/mysql/tmp/*.alog
慢日志 /data/mysql/data/mysql/slowlog*.CSV
错误日志 /data/mysql/log/alert.log

容器内路径中的*表示匹配任意字符

安装 PolarDB-X LogCollector

PolarDB-X通过Filebeat采集日志,将原始日志发送到Logstash进行解析并发送给最后的存储端。

前置要求

  1. 已经准备了一个运行中的 K8s 集群,并确保集群版本 >= 1.18.0
  2. 已经安装了 Helm 3
  3. 已经安装 PolarDB-X Operator 1.2.2 及以上的版本

Helm包安装

首先创建一个名为 polardbx-logcollector 的命名空间:

kubectl create namespace polardbx-logcollector

执行如下命令安装 PolarDB-X LogCollector:

 helm install --namespace polardbx-logcollector polardbx-logcollector https://github.com/polardb/polardbx-operator/releases/download/v1.6.2/polardbx-logcollector-1.6.2.tgz

您也可以通过 PolarDB-X 的 Helm Chart 仓库安装:

helm repo add polardbx https://polardbx-charts.oss-cn-beijing.aliyuncs.com
helm install --namespace polardbx-logcollector polardbx-logcollector polardbx/polardbx-logcollector

注:默认安装配置下,Filebeat通过DaemonSet的形式安装到k8s集群的机器上,默认每个Filebeat Pod会占用占用 500MB 内存和 1 个CPU核;Logstash Pod默认部署一个,每个占用 1.5GB 内存和 2 个CPU核。具体默认可查看: values.yaml

期望看到如下输出:

polardbx-operator logcollector plugin is installed. Please check the status of components:

    kubectl get pods --namespace {{ .Release.Namespace }}

Now start to collect logs of  your polardbx cluster.

查看日志

开启日志采集

PolarDB-X 集群的日志采集功能默认关闭,您可以通过如下命令控制控制日志采集的开启与关闭:

打开 PolarDB-X 实例的 CN 节点日志采集:

kubectl patch pxc {pxc name} --patch '{"spec":{"config":{"cn":{"enableAuditLog":true}}}}' --type merge

关闭 PolarDB-X 实例的 CN 节点日志采集:

kubectl patch pxc {pxc name} --patch '{"spec":{"config":{"cn":{"enableAuditLog":false}}}}' --type merge

打开 PolarDB-X 实例的 DN 节点日志采集:

kubectl patch pxc {pxc name} --patch '{"spec":{"config":{"dn":{"enableAuditLog":true}}}}' --type merge

关闭 PolarDB-X 实例的 DN 节点日志采集:

kubectl patch pxc {pxc name} --patch '{"spec":{"config":{"dn":{"enableAuditLog":false}}}}' --type merge

在 Logstash 标准输出查看日志

PolarDB-X 使用Logstash作为日志的解析和上报组件, 默认将日志输出到标准控制台,方便使用者验证日志的采集和解析链路是否正常。通过下面的命令查看日志采集:

kubectl logs -f  {logstash pod name} -n polardbx-logcollector

将日志投递到其它系统

Logstash支持多种输出插件 , 您也可开发自己的输出插件 , 根据实际需求将 PolarDB-X 日志投递到其它系统做进一步分析。

Logstash 的 output plugin 配置保存在 polardbx-logcollector 命名空间下名为 logstash-pipeline 的 ConfigMap 中,您可以通过如下命令修改 logstash 的 output 配置。

kubectl edit configmap logstash-pipeline -n polardbx-logcollector

logstash-pipeline 的 output 配置如下图所示:

undefined

下面本文将以 ElasticSearch 为例,介绍如何配置 Logstash,将 PolarDB-X 投递到 ElasticSearch 集群。

投递日志至 ElasticSearch

如果您的环境已经有 ES 集群,可以直接跳过《创建 ElasticSearch》。

创建 ElasticSearch

参考如下文档在 K8s 集群中快速部署一个测试的 ES 集群。

  1. 部署 ElasticSearch Operator
  2. 部署 ElasticSearch Cluster, 该步骤中需要获取ES 集群的endpoint,用户名,密码,证书。 ES 集群的访问证书可以通过如下命令获取:
    kubectl get secret quickstart-es-http-certs-public -o=jsonpath='{.data.ca\.crt}'
    
  3. 部署 Kibana

    注:上述 ES 集群仅用于测试,生产环境请自行配置 ES 集群。

更新证书 Secret

如果 ES 集群采用 HTTP 访问,可以跳过该步骤。

如果 ES 集群采用HTTPS 访问,需要配置证书,证书文件(/usr/share/logstash/config/certs/ca.crt)已通过 polardbx-logcollector 命名空间的 elastic-certs-public secret 挂载到 Logstash 的 Pod 中,通过如下命令更新secret:

kubectl edit secret elastic-certs-public -n polardbx-logcollector

配置 logstash output

前置条件:

  • k8s集群内可访问的 ES 集群地址;
  • 打开ES自动创建索引功能;
  • ES集群的上创建一个API Key 或者 账号密码;
  • 如果使用https,则需要ES集群证书。将内容写入ES证书Secret中,证书Secret为 polardbx-logcollector 命名空间的 elastic-certs-public,证书文件名为ca.crt。

通过如下命令更新 Logstash 的output 配置:

kubectl edit configmap logstash-pipeline -n polardbx-logcollector

例如,下面给出了一个 ES 集群配置的示例:

output {
  elasticsearch {
    hosts => ["https://quickstart-es-http.default:9200"]
    user => elastic
    password => sTF9B37N0jAF45Kn2Jwt874N
    ssl => true
    cacert => "/usr/share/logstash/config/certs/ca.crt"
    index => "%{[@metadata][target_index]}"
   }
}

undefined

启用elasticsearch输出插件后,记得注释掉stdout的输出配置

访问Kibana

参考部署Kibana, 登录Kibana 创建三个 Index Pattern, 用于查询日志:

日志类型 Index Pattern
SQL日志 cn_sql_log-*
慢日志 cn_slow_log-*
错误日志 cn_tddl_log-*
DN 审计日志 dn_audit_log-*
DN 慢日志 dn_slow_log-*
DN 错误日志 dn_error_log-*

Kibana 创建 Index Pattern 如下图所示: kibana-create-index

日志效果图

SQL日志 undefined

错误日志 undefined

慢日志 undefined

DN 审计日志 undefined

DN 错误日志 undefined

DN 慢日志 undefined

其他

values.yaml介绍

用户可根据自己实际情况对 polardbx-logcollector 的安装配置进行定制,values.yaml路径:charts/polardbx-logcollector/values.yaml,文件对各个配置项进行了详细的注解。

日志字段介绍

查看日志字段介绍

资源配置和性能调优建议

资源

logstash单核 filebeat单核
5000 events/s 12000 events/s

为了让核数得到充分利用,且不会oom的产生,我们需要合理配置内存资源、并发数、缓存大小等

建议根据具体场景调整的参数

filebeat的filebeat.yml配置文件

ConfigMap名称为filebeat-config。 参数:

  • SQL日志配置项里的harvester_buffer_size大小
  • queue.mem配置
  • prospector.scanner.check_interval大小
  • close.reader.after_interval 大小

参考:filebeat配置

logstash的jvm.options配置文件

ConfigMap名称为logstash-config。参数:

  • -Xms和-Xmx

logstash的logstash.yml配置文件

ConfigMap名称为logstash-config。参数:

  • pipeline.batch.size
  • pipeline.workers

参考:logstash配置

results matching ""

    No results matching ""