Home

Postgres使用PgAudit获取审计日志

背景 数据库的使用过程中,执行SQL的历史经常是需要被记录且审计的,例如在政府、企业等使用场景。 实现 本次使用PgAudit以插件的形式接入Postgres,实现审计日志的打印。 PgAudit审计信息与Postgres服务日志是放在一起的,筛选起来有难度,且官方不会做相关的支持。 因此我额外使用PgAuditLogToFile来作为PgAudit的辅助,将审计日志放到独立文件中,方便进行采集和分析。 插件编译安装 在postgres所在容器上,需要编译安装上述两个插件的动态库: # PgAudit编译安装 # 因为我使用postgres v12,因此使用PgAudit对应的v1.4.X版本或者REL_12_STABLE分支 git clone https://gith...

Read more

k8s支持ipv6

背景 虽然ipv6已经支持许多年了,但是仍然不普及。正好最近遇到了k8s需要开启ipv6支持的问题,记录一下解决方案。 环境 Kind环境不低于0.11 Kubernetes服务器环境不低于v1.23 Calico环境不低于3.24 做法 要支持ipv6,就需要自上而下全部支持。即: Cluster级别需要支持(我这边使用的是Kind) CNI需要支持(我这边使用的是Calico) Pod需要支持 Service需要支持 系统设置 linux环境下: sudo sysctl -w net.ipv4.conf.all.forwarding=1 sudo sysctl -w net.ipv6.conf.all.forwarding=1 ...

Read more

vscode的debug配置

背景 有些时候我们想要直接在vscode上实现开发+调试+运行。 开发配置 对于部分语言(例如c),我们需要指定一些配置让vscode识别到它的代码、静态库、动态库等依赖,才能正常使用。不然会有很多的报错,也无法正常进行代码跳转。 我们可以通过配置c_cpp_properties.json和settings.json来解决。 这边以mac环境下的pgbouncer代码为例,配置两个文件: // c_cpp_properties.json { "configurations": [ { "name": "Mac", "includePath": [ "${workspaceFo...

Read more

pgbouncer学习

背景 pgbouncer是一个PostgreSQL的轻量级线程池,支持客户端多种连接方式。 本地编译部署 # 依赖安装 brew install autoconf automake libtool # 编译 sh autogen.sh ./configure --enable-debug --prefix=/usr/local --with-openssl=/usr/local/opt/openssl make clean; make # 部署到/usr/local/bin make install 使用方式 连接用户数据库 使用pgbouncer需要配置增加配置文件: ; pgbouncer.ini [databases] db1 = host=localhost po...

Read more

postgres协议学习

参考 基于postgres官方文档v15进行学习,协议为v3 基本操作 基本操作分为两个阶段: Startup: 启动连接。 Normal: 连接建立之后前后端的正常交互。这里的前端(Frontend)通常指的是连接pg的客户端,后端(Backend)指的是pg服务端。 SQL的协议类型 大致有两种协议: 简单查询协议(Simple Query Protocol): 直接传递纯文本进行查询,pg服务端可以直接解析并进行执行 扩展查询协议(Extended Query Protocol): 会分步骤做查询,更灵活、性能也更好 解析预定义语句(parsing) 绑定参数(binding of parameter values) ...

Read more

golang性能监控

背景 性能测试主要用于go benchmark等压力测试的场景下,进行cpu和内存的使用分析。这边主要使用pprof来进行性能的采集 性能查看 topN 先使用命令进行cpu profiling分析 go tool pprof ./backend_server http://localhost:port/debug/pprof/profile 进入命令行后使用命令topN即可看到最耗时的N项调用 (pprof)top5 调用树 同上先进行cpu profiling分析, 再执行命令(pprof)web, 即可看到调用树 火焰图 使用go-torch将pprof生成的结果展示成火焰图的形式 brew inst...

Read more

k8s基础知识和名词整理

名词 CNI: Container Network Interface(容器网络接口)。是用于集群联网的插件 Network Policies: 网络策略。可在OSI第3层、第4层进行网络流量控制 Ingress: 对集群中服务的外部访问进行管理的API对象,可以提供负载均衡、SSL 终结和基于名称的虚拟托管,依赖于ingress controller(例如AWS,GCE,Nginx,Istio等控制器) PDB: Pod Disruption Budget(干扰预算)。PDB会限制在同一时间因自愿干扰导致的多副本应用中发生宕机的Pod数量 PV: Persistent Volumes(持久存储卷)。拥有独立于pod的生命周期 Storage Classes:...

Read more