实践教程之采集PolarDB-X SQL日志到ElasticSearch

本文涉及的产品
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
简介: PolarDB-X 为了方便用户体验,提供了免费的实验环境,您可以在实验环境里体验 PolarDB-X 的安装部署和各种内核特性。除了免费的实验,PolarDB-X 也提供免费的视频课程,手把手教你玩转 PolarDB-X 分布式数据库。本期实验将指导您如何采集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 merge

5. 在 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: false

6.执行如下命令,创建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: quickstart

10.执行如下命令,创建 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-logcollector

2.配置 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.在实验页面,单击右上角的+ 图标,创建新的终端二。

8.png

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 -p<PolarDB-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-*


7.jpeg

6.jpeg

6.在输入框中输入相关关键字,即可搜索PolarDB-X相关日志。

例:搜索包含select关键字的SQL。

message.sql: "create"


本文来源:PolarDB-X知乎号,关注阅读更多技术好文。


相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
SQL 数据库
为什么 SQL 日志文件很大,我应该如何处理?
为什么 SQL 日志文件很大,我应该如何处理?
|
2月前
|
SQL 存储 缓存
高基数 GroupBy 在 SLS SQL 中的查询加速
本文详细介绍了SLS中的高基数GroupBy查询加速技术。
108 17
|
1月前
|
SQL 数据库
为什么SQL日志文件很大,该如何处理?
为什么SQL日志文件很大,该如何处理?
|
2月前
|
SQL 安全 数据库
基于SQL Server事务日志的数据库恢复技术及实战代码详解
基于事务日志的数据库恢复技术是SQL Server中一个非常强大的功能,它能够帮助数据库管理员在数据丢失或损坏的情况下,有效地恢复数据。通过定期备份数据库和事务日志,并在需要时按照正确的步骤恢复,可以最大限度地减少数据丢失的风险。需要注意的是,恢复数据是一个需要谨慎操作的过程,建议在执行恢复操作之前,详细了解相关的操作步骤和注意事项,以确保数据的安全和完整。
115 0
|
3月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
55 0
|
3月前
|
SQL 安全 测试技术
【数据守护者必备】SQL数据备份与恢复策略全解析:从全量到日志备份,手把手教你确保企业信息万无一失的实战技巧!
【8月更文挑战第31天】数据库是企业核心业务数据的基石,为防止硬件故障、软件错误或人为失误导致的数据丢失,制定可靠的备份与恢复策略至关重要。本文通过一个在线购物平台的案例,详细介绍了使用 SQL Server 进行全量备份、差异备份及事务日志备份的方法,并演示了如何利用 SQL Server Agent 实现自动化备份任务。此外,还提供了数据恢复的具体步骤和测试建议,确保数据安全与业务连续性。
145 0
|
11天前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
116 30
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
|
1月前
|
XML JSON Java
Logback 与 log4j2 性能对比:谁才是日志框架的性能王者?
【10月更文挑战第5天】在Java开发中,日志框架是不可或缺的工具,它们帮助我们记录系统运行时的信息、警告和错误,对于开发人员来说至关重要。在众多日志框架中,Logback和log4j2以其卓越的性能和丰富的功能脱颖而出,成为开发者们的首选。本文将深入探讨Logback与log4j2在性能方面的对比,通过详细的分析和实例,帮助大家理解两者之间的性能差异,以便在实际项目中做出更明智的选择。
216 3
|
1月前
|
存储 缓存 关系型数据库
MySQL事务日志-Redo Log工作原理分析
事务的隔离性和原子性分别通过锁和事务日志实现,而持久性则依赖于事务日志中的`Redo Log`。在MySQL中,`Redo Log`确保已提交事务的数据能持久保存,即使系统崩溃也能通过重做日志恢复数据。其工作原理是记录数据在内存中的更改,待事务提交时写入磁盘。此外,`Redo Log`采用简单的物理日志格式和高效的顺序IO,确保快速提交。通过不同的落盘策略,可在性能和安全性之间做出权衡。
1625 14
|
1月前
|
Python
log日志学习
【10月更文挑战第9天】 python处理log打印模块log的使用和介绍
30 0

热门文章

最新文章

相关产品

  • 云原生数据库 PolarDB