polardbxoperatordocs/ops/logcollector/1-logcollector.md

205 lines
8.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 日志采集
本文介绍如何在 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 | 否 |
>容器内路径中的*表示任意目录名
## 安装 PolarDB-X LogCollector
PolarDB-X通过Filebeat采集日志将原始日志发送到Logstash进行解析并发送给最后的存储端。
### 前置要求
1. 已经准备了一个运行中的 K8s 集群,并确保集群版本 >= 1.18.0
2. 已经安装了 [Helm 3](https://helm.sh/docs/intro/install/)
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.3.0/polardbx-logcollector-1.3.0.tgz
```
您也可以通过 PolarDB-X 的 Helm Chart 仓库安装:
```bash
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](https://github.com/polardb/polardbx-operator/blob/main/charts/polardbx-logcollector/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
```
### 在 Logstash 标准输出查看日志
PolarDB-X 使用Logstash作为日志的解析和上报组件, 默认将日志输出到标准控制台,方便使用者验证日志的采集和解析链路是否正常。通过下面的命令查看日志采集:
```shell
kubectl logs -f {logstash pod name} -n polardbx-logcollector
```
## 将日志投递到其它系统
Logstash支持多种[输出插件](https://www.elastic.co/guide/en/logstash/current/output-plugins.html) , 您也可[开发自己的输出插件](https://www.elastic.co/guide/en/logstash/current/output-new-plugin.html) 根据实际需求将 PolarDB-X 日志投递到其它系统做进一步分析。
Logstash 的 output plugin 配置保存在 polardbx-logcollector 命名空间下名为 logstash-pipeline 的 ConfigMap 中,您可以通过如下命令修改 logstash 的 output 配置。
```shell
kubectl edit configmap logstash-pipeline -n polardbx-logcollector
```
logstash-pipeline 的 output 配置如下图所示:
![undefined](images/logstash-pipeline-config.png )
下面本文将以 ElasticSearch 为例,介绍如何配置 Logstash将 PolarDB-X 投递到 ElasticSearch 集群。
### 投递日志至 ElasticSearch
如果您的环境已经有 ES 集群,可以直接跳过《创建 ElasticSearch》。
#### 创建 ElasticSearch
参考如下文档在 K8s 集群中快速部署一个测试的 ES 集群。
1. [部署 ElasticSearch Operator](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-deploy-eck.html#k8s-deploy-eck)
2. [部署 ElasticSearch Cluster](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-deploy-elasticsearch.html), 该步骤中需要获取ES 集群的endpoint用户名密码证书。
ES 集群的访问证书可以通过如下命令获取:
```shell
kubectl get secret quickstart-es-http-certs-public -o=jsonpath='{.data.ca\.crt}'
```
3. [部署 Kibana](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-deploy-kibana.html)
> 注:上述 ES 集群仅用于测试,生产环境请自行配置 ES 集群。
#### 更新证书 Secret
如果 ES 集群采用 HTTP 访问,可以跳过该步骤。
如果 ES 集群采用HTTPS 访问,需要配置证书,证书文件(/usr/share/logstash/config/certs/ca.crt)已通过 polardbx-logcollector 命名空间的 elastic-certs-public secret 挂载到 Logstash 的 Pod 中通过如下命令更新secret:
```shell
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 配置:
```shell
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]}"
}
}
```
- 如需了解更多的配置,可访问 [Elastic Search Output Plugins Options](https://www.elastic.co/guide/en/logstash/current/plugins-outputs-elasticsearch.html#plugins-outputs-elasticsearch-options)
![undefined](images/logstash-pipeline-config-output.png)
启用elasticsearch输出插件后记得**注释掉stdout的输出配置**。
#### 访问Kibana
参考[部署Kibana](https://www.elastic.co/guide/en/cloud-on-k8s/current/k8s-deploy-kibana.html#k8s-deploy-kibana), 登录Kibana 创建三个 Index Pattern, 用于查询日志:
| 日志类型 | Index Pattern |
| --- | --- |
| SQL日志 | cn_sql_log-* |
| 慢日志 | cn_slow_log-* |
| 错误日志 | cn_tddl_log-* |
Kibana 创建 Index Pattern 如下图所示:
![kibana-create-index](images/kibana-create-index.png)
#### 日志效果图
SQL日志
![undefined](images/sql-log-result.png)
错误日志
![undefined](images/error-log-result.png)
慢日志
![undefined](images/slow-log-result.png)
### 其他
- [已有输出的插件](https://www.elastic.co/guide/en/logstash/current/output-plugins.html)
- [开发新的输出插件](https://www.elastic.co/guide/en/logstash/current/output-new-plugin.html)
# values.yaml介绍
用户可根据自己实际情况对 polardbx-logcollector 的安装配置进行定制values.yaml路径charts/polardbx-logcollector/values.yaml文件对各个配置项进行了详细的注解。
# 日志字段介绍
查看[日志字段介绍](2-logfield.md)。
# 资源配置和性能调优建议
## 资源
| logstash单核 | filebeat单核 |
|---------------|----------------|
| 5000 events/s | 12000 events/s |
为了让核数得到充分利用且不会oom的产生我们需要合理配置内存资源、并发数、缓存大小等
## 建议根据具体场景调整的参数
### filebeat的filebeat.yml配置文件
ConfigMap名称为filebeat-config。
参数:
- SQL日志配置项里的harvester_buffer_size大小
- queue.mem配置
参考:[filebeat配置](https://www.elastic.co/guide/en/beats/filebeat/current/configuring-howto-filebeat.html)
### logstash的jvm.options配置文件
ConfigMap名称为logstash-config。参数
- -Xms和-Xmx
### logstash的logstash.yml配置文件
ConfigMap名称为logstash-config。参数
- pipeline.batch.size
- pipeline.workers
参考:[logstash配置](https://www.elastic.co/guide/en/logstash/current/config-setting-files.html)