Postgres使用PgAudit获取审计日志
背景
数据库的使用过程中,执行SQL的历史经常是需要被记录且审计的,例如在政府、企业等使用场景。
实现
本次使用PgAudit以插件的形式接入Postgres,实现审计日志的打印。
PgAudit审计信息与Postgres服务日志是放在一起的,筛选起来有难度,且官方不会做相关的支持。
因此我额外使用PgAuditLogToFile来作为PgAudit的辅助,将审计日志放到独立文件中,方便进行采集和分析。
插件编译安装
在postgres所在容器上,需要编译安装上述两个插件的动态库:
# PgAudit编译安装
# 因为我使用postgres v12,因此使用PgAudit对应的v1.4.X版本或者REL_12_STABLE分支
git clone https://gith...
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
...
vscode的debug配置
背景
有些时候我们想要直接在vscode上实现开发+调试+运行。
开发配置
对于部分语言(例如c),我们需要指定一些配置让vscode识别到它的代码、静态库、动态库等依赖,才能正常使用。不然会有很多的报错,也无法正常进行代码跳转。
我们可以通过配置c_cpp_properties.json和settings.json来解决。
这边以mac环境下的pgbouncer代码为例,配置两个文件:
// c_cpp_properties.json
{
"configurations": [
{
"name": "Mac",
"includePath": [
"${workspaceFo...
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...
postgres协议学习
参考
基于postgres官方文档v15进行学习,协议为v3
基本操作
基本操作分为两个阶段:
Startup: 启动连接。
Normal: 连接建立之后前后端的正常交互。这里的前端(Frontend)通常指的是连接pg的客户端,后端(Backend)指的是pg服务端。
SQL的协议类型
大致有两种协议:
简单查询协议(Simple Query Protocol): 直接传递纯文本进行查询,pg服务端可以直接解析并进行执行
扩展查询协议(Extended Query Protocol): 会分步骤做查询,更灵活、性能也更好
解析预定义语句(parsing)
绑定参数(binding of parameter values)
...
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...
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:...
30 post articles, 5 pages.