实践教程之采集PolarDB-X SQL日志到ElasticSearch
PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。
本期实验将指导您如何采集PolarDB-X SQL日志到ElasticSearch
本期免费实验地址
本期教学视频地址
前置准备
假设已经根据前一讲内容完成了PolarDB-X的搭建部署,使用PolarDB-X Operator安装PolarDB-X,并且可以成功链接上PolarDB-X数据库。
安装PolarDB-X LogCollector
本步骤将指导您安装PolarDB-X LogCollector组件,并将PolarDB-X日志投递到Elastic Search中。
1.执行如下命令,创建一个名为polardbx-logcollector的命名空间。
kubectl create namespace polardbx-logcollector
2.执行如下命令,安装 PolarDB-X LogCollector。
helm install --namespace polardbx-logcollector polardbx-logcollector polardbx/polardbx-logcollector --version=1.3.0-alpha.1
3.执行如下命令,等待 PolarDB-X LogCollector 的组件ready。
kubectl get pods -n polardbx-logcollector
4. PolarDB-X 日志采集功能是默认关闭的,执行如下命令,为第三步创建的 PolarDB-X 集群开启日志采集功能。
kubectl patch pxc polardb-x --patch '{
"spec":{
"config":{
"cn":{
"enableAuditLog":true}
}
}
}
' --type merge5. 在 LogStash 标准输出查看 PolarDB-X 日志。
说明:logstash pod name需要替换为 polardbx-logcollector 命名空间下的 logstash pod 名称。
kubectl logs -n polardbx-logcollector {
logstash pod name}
-f部署Elastic Search
本步骤将指导您如何在K8s上部署一个Elastic Search集群。
1.执行如下命令,创建ECK的CRD。
kubectl create -f https://download.elastic.co/downloads/eck/2.4.0/crds.yaml
2.执行如下命令,安装ECKOperator。
kubectl apply -f https://download.elastic.co/downloads/eck/2.4.0/operator.yaml
3.执行如下命令,查看ECK Operator的POD状态,等待所有的POD都变成Running状态。
kubectl get pods -n elastic-system
4.执行如下命令,创建es.yaml。
vim es.yaml
5.按i键进入编辑模式,将如下代码复制到文件中,然后按ECS退出编辑模式,输入:wq后按下Enter键保存并退出。
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
name: quickstart
spec:
version: 8.4.3
image: elasticsearch:8.4.3
nodeSets:
- name: default
count: 1
config:
node.store.allow_mmap: false6.执行如下命令,创建Elastic Search集群。
kubectl apply -f es.yaml
7.执行如下命令,查看Elastic Search集群创建状态。
kubectl get elasticsearch
返回结果如下,请您耐心等待几分钟,当PHASE显示为Ready时,表示Elastic Search 集群已经部署完成。
8.执行如下命令,创建kibana.yaml。
vim kibana.yaml
9.按i键进入编辑模式,将如下代码复制到文件中,然后按ECS退出编辑模式,输入:wq后按下Enter键保存并退出。
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
name: quickstart
spec:
version: 8.4.3
image: kibana:8.4.3
count: 1
elasticsearchRef:
name: quickstart10.执行如下命令,创建 Kinana 实例。
kubectl apply -f kibana.yaml
11.执行如下命令,查看Kibana创建状态。
kubectl get kibana
12.获取Elastic Search集群的访问信息。
执行如下命令,获取Elastic Search的密码。
kubectl get secret quickstart-es-elastic-user -o go-template='{
{
.data.elastic | base64decode}
}
' | xargs echo "PASSWORD: "投递日志到 Elastic Search
PolarDB-X日志采集功能开启后,默认会投递日志到logstash的标准输出。您可以修改logstash的output配置,将日志投递到其它系统中。本步骤将指导您将PolarDB-X日志投递到Elastic Search中,并在Kibana上访问日志信息。
1.Elastic Search 8以上默认要求HTTPS访问,因此需要为 logstash 配置访问 Elastic Search 的证书。执行如下命令获取 Elastic Search的访问证书,并配置到 logstash的 secret中
CRT=$(kubectl get secret quickstart-es-http-certs-public -o jsonpath={
.data}
) kubectl patch secret elastic-certs-public -p "{
\"data\": ${
CRT}
}
" -n polardbx-logcollector2.配置 Logstash 的 output, 将日志输出到 ES。
2.1 获取 ES 的访问密码。
注意:请提前复制密码,后续的配置文件中需要填入。
kubectl get secret quickstart-es-elastic-user -o go-template='{
{
.data.elastic | base64decode}
}
' | xargs echo "PASSWORD: "2.2 执行如下命令,创建 logstash-pipeline-patch.yaml。
vim logstash-pipeline-patch.yaml
2.3 按i键进入编辑模式,将如下代码复制到文件中,并修改output中的password字段为上面获取到的ES密码,然后按ECS退出编辑模式,输入:wq后按下Enter键保存并退出。
注意:需要修改output中的password字段,才能正确投递。
data:
logstash.conf: |-
input {
beats {
port =>
5044
}
}
filter {
if [fields][log_type] in ["cn_sql_log","cn_slow_log"] {
polardbx {
}
date{
match =>
["timestamp", "UNIX_MS","ISO8601"]
timezone =>
"Asia/Shanghai"
}
mutate{
remove_field =>
["event", "timestamp","[message][begin_time]","[message][timestamp]"]
add_field =>
{
"[@metadata][target_index]" =>
"%{
[fields][log_type]}
-%{
+YYYY.MM.dd}
" }
}
}
else if [fields][log_type] == "cn_tddl_log" {
grok{
match =>
{
"message" =>
"%{
TIMESTAMP_ISO8601:timestamp}
\[%{
DATA:thread}
\] %{
LOGLEVEL:loglevel}
%{
DATA:logger}
- %{
JAVALOGMESSAGE:messagetmp}
" }
}
date{
match =>
["timestamp","ISO8601"]
timezone =>
"Asia/Shanghai"
}
mutate{
remove_field =>
["event","timestamp"]
rename =>
{
"messagetmp" =>
"message"}
add_field =>
{
"[@metadata][target_index]" =>
"%{
[fields][log_type]}
-%{
+YYYY.MM.dd}
" }
}
}
else {
mutate{
add_field =>
{
"[@metadata][target_index]" =>
"other_log-%{
+YYYY.MM.dd}
" }
}
}
}
output {
elasticsearch {
hosts =>
["https://quickstart-es-http.default:9200"]
user =>
elastic
password =>
"{
ES 的密码}
"
ssl =>
true
cacert =>
"/usr/share/logstash/config/certs/ca.crt"
index =>
"%{
[@metadata][target_index]}
"
}
}
2.4 执行如下命令,更新Logstash的output配置,将上面的配置项填入output中。
kubectl patch configmap logstash-pipeline -n polardbx-logcollector --patch-file logstash-pipeline-patch.yaml
2.5 执行如下命令,等待logstash pod重建完成。
kubectl get pods -n polardbx-logcollector -w
执行业务SQL
本步骤将指导您如何连接通过K8s部署的PolarDB-X集群,并执行相关SQL、
1.执行如下命令,查看PolarDB-X集群登录密码。
kubectl get secret polardb-x -o jsonpath="{
.data['polardbx_root']}
" | base64 -d - | xargs echo "Password: "返回结果如下,您可以查看到PolarDB-X集群登录密码。
2.执行如下命令,将PolarDB-X集群端口转发到3306端口。
说明:使用MySQL Client方式登录通过k8s部署的PolarDB-X集群前,您需要进行获取PolarDB-X集群登录密码和端口转发。
kubectl port-forward svc/polardb-x 3306
3.在实验页面,单击右上角的+ 图标,创建新的终端二。
4.在终端二中,执行如下命令,连接PolarDB-X集群。
说明:
- 您需要将PolarDB-X集群登录密码> 替换为实际获取到的PolarDB-X集群登录密码。
- 如遇到mysql: [Warning] Using a password on the command line interface can be insecure.ERROR 2013 (HY000): Lost connection to MySQL server at 'reading initial communication packet', system error: 0报错,请您稍等一分钟,重新转发端口并连接PolarDB-X集群即可。
mysql -h127.0.0.1 -P3306 -upolardbx_root -pPolarDB-X集群登录密码>
5.依次执行如下的SQL语句,验证PolarDB-X是否正常。
# 检查GMS
select * from information_schema.schemata;
# 创建分区表
create database polarx_example partition_mode='partitioning';
use polarx_example;
create table example (
`id` bigint(11) auto_increment NOT NULL,
`name` varchar(255) DEFAULT NULL,
`score` bigint(11) DEFAULT NULL,
primary key (`id`)
) engine=InnoDB default charset=utf8
partition by hash(id)
partitions 8;
insert into example values(null,'lily',375),(null,'lisa',400),(null,'ljh',500);
select * from example;
select sleep(2);
select sleep(3);
show topology from example;
查看SQL审计日志
本步骤将指导您登录Kibana,查看PolarDB-X的SQL日志。
1.切换回终端一窗口,输入CRTL+C终止之前的命令。
2.执行如下命令,将Kibana的service转发到本地。
kubectl port-forward service/quickstart-kb-http 5601 --address=0.0.0.0
3.在本地电脑上通过浏览器访问URL: https://{ 实验ECS公网ip} :5601。
4.输入用户名密码。
用户名:elastic 密码:上面获取的ES访问密码
5.登录后创建如下三个Index patthen。
| 日志类型 | Index Pattern |
| SQL日志 | cn_sql_log-* |
| 慢日志 | cn_slow_log-* |
| 错误日志 | cn_tddl_log-* |
6.在输入框中输入相关关键字,即可搜索PolarDB-X相关日志。
例:搜索包含select关键字的SQL。
message.sql: "create"
本文来源:PolarDB-X知乎号,关注阅读更多技术好文。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 实践教程之采集PolarDB-X SQL日志到ElasticSearch
本文地址: https://pptw.com/jishu/298653.html
