同步操作将从 openEuler/gala-gopher 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
gala-gopher是gala项目内负责数据采集的组件,其为gala项目提供Metrics、Event、Perf等数据,便于gala项目完成系统拓扑的绘制和故障根因的定位。 gala-gopher是一款结合eBPF、java agent等非侵入可观测技术的观测平台,探针是gala-gopher用于观测和采集数据的主要工具,通过探针式架构gala-gopher可以轻松实现增加、减少探针。
系统层资源可能会影响应用性能,使用gala-gopher将提供Node、Container、Device等维度的系统性能观测能力。包括:
通过网络监控能力,可以轻松获取如下信息:
云原生场景会部署大量微服务,微服务之间访问性能的波动会直接影响整体业务效果,使用gala-gopher可以轻松了解每个微服务(或者POD)的访问时延、吞吐量、错误率性能。
其支持微服务之间的访问协议包括:HTTP 1.X,PGSQL,Redis,#DNS,#HTTP2.0,#Dubbo,#MySQL,#Kafka(#表示规划中);
支持加密场景:C/C++语言(OpenSSL 1.1.0/1.1.1); GO语言(GoTLS);Java语言(JSSE类库)
应用性能经常受系统资源性能影响,gala-gopher可以提供应用视角精细化(进程粒度)的系统性能观测能力,涉及网络、I/O、内存、调度等多个方面。
性能火焰图是常用的性能问题诊断工具,常见的性能火焰图工具(perf、async-profier)存在底噪大、精细化不够、多语言能力不够等问题。
gala-gopher提供持续、低底噪、多实例形式的性能Profiling能力,覆盖C/C++、Go、Java(最佳效果时,推荐加上-XX:+PreserveFramePointer启动参数)语言。
使用方法参考这里。
kafka通常作为分布式应用场景中的消息中心,现有监控工具对kafka topic的观测、跟踪缺乏有效手段,gala-gopher针对此问题,提供自动化的kafka监控能力。提供能力如下:
Topic流监控:提供topic 生产者、消费者的IP、Port信息,结合gala-spider,可以绘制出topic流视图。
Topic性能:提供topic维度的吞吐量性能。
约束:不支持加密场景。
nginx/haproxy通常作为云原生应用之间的负载均衡,网络流量经过负载均衡之后,现有监控工具无法有效观测云原生应用之间的真实流量路径。gala-gopher为此提供面向负载均衡的网络流量观测能力:
高负载应用是指像DB、Cache等应用,常见的比如Redis/PostgreSQL等,现有性能监控工具(拨测、打点)存在失真、误差等问题,gala-gopher针对Redis/PostgreSQL应用时延SLI观测能力。
备注:高负载应用性能监控与应用访问性能监控的区别在于,前者SLI包括了应用处理时延、系统处理时延,后者只包括应用处理时延。
gala-gopher集成了常用的native探针以及知名中间件探针;gala-gopher有良好的扩展性,能方便的集成各种类型的探针程序,发挥社区的力量丰富探针框架的能力;gala-gopher中的几个主要部件:
gala-gopher框架
gala-gopher的基础框架,负责配置文件解析、native探针/extend探针的管理、探针数据收集管理、探针数据上报对接、集成测试等;
native探针
原生探针,主要是基于linux的proc文件系统收集的系统观测指标;
extend探针
支持shell/java/python/c等不同语言的第三方探针程序,仅需满足轻量的数据上报格式即可集成到gala-gopher框架中;方便满足各种应用场景下的观测诉求;目前已实现知名中间件程序的探针观测及指标上报,如:lvs、nginx、haproxy、dnsmasq、dnsbind、kafka、rabbitmq等;
部署配置文件
gala-gopher启动配置文件,可自定义基础框架行为,比如日志级别、指定数据上报的对接服务信息(kafka/prometheus等)。
获取rpm包
从发行版仓库选择合适的版本(推荐最新版),下载对应架构的rpm包。
rpm安装
配置OS版本配套的openEuler repo源,至少包含everything、update、EPOL三个目录(具体配置方法可参考openEuler社区文档《管理员指南》),然后通过如下命令进行安装(以2.0.0-dev发行版x86_64架构为例):
yum install gala-gopher-2.0.0-1.oe2203sp1.x86_64.rpm
启动服务
通过 systemd 启动后台服务:
systemctl start gala-gopher.service
获取官方容器镜像
# x86_64架构
docker pull hub.oepkgs.net/a-ops/gala-gopher-x86_64
# aarch64架构
docker pull hub.oepkgs.net/a-ops/gala-gopher-aarch64
注:如果拉取镜像的过程中出现"X509: certificate signed by unknown authority"错误,则需要将"hub.oepkgs.net"加入到/etc/docker/daemon.json(文件不存在时需要手动创建)中的"insecure-registries"项后重启docker服务再重试。
准备BTF文件
gala-gopher的跨版本兼容(CO-RE)特性依赖内核BTF文件,在openEuler某些早期版本内核未自带BTF文件,此时需要手动准备。
用户可以查看系统上/sys/kernel/btf/vmlinux是否存在,如果存在,可以直接跳过本步骤。
在openEuler btf 归档仓库进入对应OS版本和架构目录,下载与内核版本(执行uname -r命令获取)完全一致的btf压缩文件,例如4.19.90-2012.4.0.0053.oe1.x86_64.btf.tar.xz,通过如下命令解压到/home目录:
tar -xf 4.19.90-2012.4.0.0053.oe1.x86_64.btf.tar.xz -C /home/
注:对于非openEuler操作系统,请寻求OSV厂商支持,或者自行制作BTF文件。
创建并运行容器
以x86_64架构为例,aarch64只需要替换最后的镜像名即可:
1)系统存在/sys/kernel/btf/vmlinux文件时:
docker run -d --name gala-gopher --privileged --pid=host --network=host \
-v /:/host -v /etc/localtime:/etc/localtime:ro -v /sys:/sys \
-v /usr/lib/debug:/usr/lib/debug -v /var/lib/docker:/var/lib/docker \
-e GOPHER_HOST_PATH=/host \
hub.oepkgs.net/a-ops/gala-gopher-x86_64
2)系统不存在/sys/kernel/btf/vmlinux文件时,需要将步骤2中准备的btf文件映射到容器中:
docker run -d --name gala-gopher --privileged --pid=host --network=host \
-v /:/host -v /etc/localtime:/etc/localtime:ro -v /sys:/sys \
-v /usr/lib/debug:/usr/lib/debug -v /var/lib/docker:/var/lib/docker \
-v /home/4.19.90-2012.4.0.0053.oe1.x86_64.btf:/opt/gala-gopher/btf/4.19.90-2012.4.0.0053.oe1.x86_64.btf \
-e GOPHER_HOST_PATH=/host \
hub.oepkgs.net/a-ops/gala-gopher-x86_64
完成安装后,可执行如下命令进行验证,如果命令执行未报错,则表示安装已成功。
curl http://localhost:8888
gala-gopher启动时框架的行为由配置文件控制,具体见配置文件说明。
在容器/k8s场景下,用户可在部署gala-gopher通过如下参数修改部分配置(不指定参数时则保持默认配置):
变量名 | 变量作用 | 配置值说明 |
---|---|---|
GOPHER_LOG_LEVEL | 控制gala-gopher日志输出级别 | 可配置如下值:debug/info/warn/error |
GOPHER_EVENT_CHANNEL | gala-gopher亚健康巡检异常事件输出方式 | kafka:通过kafka上报(默认) logs:输出至本地日志 |
GOPHER_META_CHANNEL | gala-gopher观测对象元数据metadata输出方式 | kafka:通过kafka上报(默认) logs:输出至本地日志 |
GOPHER_KAKFA_SERVER | gala-gopher上报亚健康巡检异常事件、观测对象元数据metadata的kafka服务端IP地址 | GOPHER_EVENT_CHANNEL和GOPHER_META_CHANNEL都设为logs时可设置为空,否则需要设置为有效的kafka服务端IP地址,例如1.2.3.4(IP地址中支持指定端口号,若未指定则使用默认端口号9092) |
GOPHER_METRIC_ADDR | gala-gopher作为prometheus exporter输出指标数据的监听地址 | 建议配置本机有效的网卡IP,默认为0.0.0.0,即全IP监听 |
GOPHER_METRIC_PORT | gala-gopher作为prometheus exporter输出指标数据的监听端口 | 配置有效且未被其他程序占用的端口号,默认为8888 |
GOPHER_REST_ADDR | 动态配置RESTful API的监听地址 | 建议配置本机有效的网卡IP,默认为0.0.0.0,即全IP监听 |
GOPHER_REST_PORT | 动态配置RESTful API端口号 | 配置有效且未被其他程序占用的端口号,默认为9999 |
GOPHER_REST_AUTH | 控制动态配置RESTful接口是否开启https以及证书鉴权 | no:不开启(默认) yes:开启 |
GOPHER_REST_PRIVATE_KEY | 动态配置RESTful API开启https的私钥文件路径 | GOPHER_REST_AUTH为yes时必配,路径为绝对路径 |
GOPHER_REST_CERT | 动态配置RESTful API开启https的证书文件路径 | GOPHER_REST_AUTH为yes时必配,路径为绝对路径 |
GOPHER_REST_CAFILE | 动态配置RESTful API开启鉴权的CA证书文件路径 | GOPHER_REST_AUTH为yes时必配,路径为绝对路径 |
GOPHER_METRIC_LOGS_TOTAL_SIZE | metrics指标数据日志文件总大小的上限,单位为MB | 需为正整数,默认为100 |
默认情况下,gala-gopher启动后不会运行任何探针,用户需要根据实际需求通过RestFul API启动探针,并配置其观测范围、运行参数等。
具体操作指导参考探针动态配置接口说明。
为了防止重启gala-gopher服务或者容器时用户需要重新配置与启动探针,gala-gopher提供默认探针配置文件供用户固化探针配置。该文件安装在/etc/gala-gopher/probes.init,配置格式为:[采集特性] [配置的json语句],每个探针一行,最多支持配置20行,多余配置会被忽略,例如:
tcp {"cmd":{"probe":["tcp_rtt","tcp_windows","tcp_abnormal"]},"snoopers":{"proc_name":[{"comm":"java","cmdline":""}]},"params":{"report_event":1},"state":"running"}
baseinfo {"cmd":{"probe":["cpu","fs","host"]},"state":"running"}
在容器/k8s场景下,用户可在部署gala-gopher通过GOPHER_PROBES_INIT参数来实现该功能(不指定该参数时则保持默认不运行任何探针),例如:
docker run -d --name gala-gopher --privileged --pid=host --network=host \
-v /:/host -v /etc/localtime:/etc/localtime:ro -v /sys:/sys \
-v /usr/lib/debug:/usr/lib/debug -v /var/lib/docker:/var/lib/docker \
-e GOPHER_HOST_PATH=/host \
-e GOPHER_PROBES_INIT='
baseinfo {"cmd":{"probe":["cpu","fs","host"]},"state":"running"}
tcp {"cmd":{"probe":["tcp_rtt"]},"snoopers":{"proc_name":[{"comm":"java"}]},"state":"running"}
' \
hub.oepkgs.net/a-ops/gala-gopher-x86_64
构建环境要求:openEuler-22.03-LTS-SP1及以上,并配置OS版本配套的openEuler repo源,至少包含everything、update、EPOL三个目录(具体配置方法可参考openEuler社区文档《管理员指南》)。
下载仓库源码到本地,确认切换到master分支,然后在源码的build目录下执行以下构建动作:
安装构建依赖包
该步骤会检查安装架构感知框架所有的编译依赖包,涉及三方探针编译、运行的依赖包会在编译构建中检查安装。
# sh build.sh --check
构建
# sh build.sh --clean
# sh build.sh --release # RELEASE模式
# 或者
# sh build.sh --debug # DEBUG模式
注:DEBUG模式与RELEASE模式在功能上没有差别,DEBUG模式框架测和探针支持debug打印,便于本地调试与问题定位。
安装
# sh install.sh
运行
# gala-gopher
构建环境要求:openEuler-22.03-LTS-SP1及以上,并配置OS版本配套的openEuler repo源,至少包含everything、update、EPOL三个目录(具体配置方法可参考openEuler社区文档《管理员指南》)。
下载仓库源码到本地,确认切换到master分支,取出源码根目录下的gala-gopher.spec后执行如下构建动作:
安装rpm-build以及构建依赖包(参照编译二进制)
# yum install rpm-build
# sh build.sh --check
生成源码压缩包并将其放入/root/rpmbuild/SOURCES目录下
# cp -rf gala-gopher gala-gopher-2.0.0
# tar czf gala-gopher-2.0.0.tar.gz gala-gopher-2.0.0
# mkdir -p /root/rpmbuild/SOURCES
# mv gala-gopher-2.0.0.tar.gz /root/rpmbuild/SOURCES
构建rpm包
rpmbuild -ba gala-gopher.spec
等待构建完成后,rpm包文件被存放在/root/rpmbuild/RPMS/下对应架构目录内,示例如下:
/root/rpmbuild/RPMS/x86_64/gala-gopher-2.0.0-1.x86_64.rpm
获取如下文件,放在同一目录下:
在目录中执行如下命令构建出容器镜像(以x86_64为例):
# docker build -f Dockerfile_x86_64 -t gala-gopher:2.0.0 .
生成容器镜像后可以通过save命令将镜像保存为tar文件:
# docker save -o gala-gopher-2.0.0.tar gala-gopher:2.0.0
其他宿主机可以通过load命令导入容器镜像:
# docker load gala-gopher-2.0.0.tar
gala-gopher提供持续性能Profiling可以持续监控应用的OnCPU、OffCPU、Memory Alloc等性能。监控应用程序使用了eBPF周期性或事件触发式以持续收集应用堆栈信息。
通过java agent获取java函数符号表,eBPF获取堆栈信息,两者结合完成java场景的持续profiling。
gala-gopher提供的微服务访问性能监控可以非侵入、多语言的完成L7层流量性能监控能力。在java场景中,java应用会使用JSSE类库进行加密通信,eBPF在内核层获取到L7层流量是加密态,无法完成解析以及性能监控。通过java agent字节码注入技术,将JSSEProbeAgent.jar attach至目标jvm进程完成明文RPC消息的获取,通过临时文件读入L7。
参考这里。
特性 | 发布时间 | 发布版本 |
---|---|---|
TCP异常巡检 | 22.12 | openEuler 22.03 SP1 |
Socket异常巡检 | 22.12 | openEuler 22.03 SP1 |
系统调用异常巡检 | 22.12 | openEuler 22.03 SP1 |
进程I/O异常巡检 | 22.12 | openEuler 22.03 SP1 |
Block I/O异常巡检 | 22.12 | openEuler 22.03 SP1 |
资源泄漏异常巡检 | 22.12 | openEuler 22.03 SP1 |
硬件(磁盘/网卡/内存)故障巡检 | 23.09 | openEuler 22.03 SP1, openEuler 23.09 |
JVM异常巡检 | 23.09 | openEuler 22.03 SP1, openEuler 23.09 |
主机网络栈(包括虚拟化)丢包巡检 | 23.09 | openEuler 22.03 SP1, openEuler 23.09 |
特性 | 发布时间 | 发布版本 |
---|---|---|
进程级TCP观测能力 | 22.12 | openEuler 22.03 SP1 |
进程级Socket观测能力 | 22.12 | openEuler 22.03 SP1 |
分布式存储全栈I/O观测能力 | 22.12 | openEuler 22.03 SP1 |
虚拟化存储I/O观测能力 | 22.12 | openEuler 22.03 SP1 |
Block I/O观测能力 | 22.12 | openEuler 22.03 SP1 |
容器运行观测能力 | 22.12 | openEuler 22.03 SP1 |
Redis性能观测能力 | 22.12 | openEuler 22.03 SP1 |
PG性能观测能力 | 22.12 | openEuler 22.03 SP1 |
Nginx会话观测能力 | 22.12 | openEuler 22.03 SP1 |
Haproxy会话观测能力 | 22.12 | openEuler 22.03 SP1 |
Kafka会话观测能力 | 22.12 | openEuler 22.03 SP1 |
JVM性能观测能力 | 23.06 | openEuler 22.03 SP1, openEuler 23.09 |
L7协议观测能力(HTTP1.X/MySQL/PGSQL/Redis/Kafka) | 23.09 | openEuler 22.03 SP1, openEuler 23.09 |
L7协议观测能力(HTTP1.X/MySQL/PGSQL/Redis/Kafka/MongoDB/DNS/RocketMQ) | 24.03 | openEuler 22.03 SP3,openEuler 24.03 |
通用应用性能观测能力 | 24.03 | openEuler 24.03 |
全链路协议跟踪能力 | 24.09 | openEuler 24.09 |
特性 | 发布时间 | 发布版本 |
---|---|---|
系统性能Profiling(OnCPU、Mem) | 23.03 | openEuler 23.09 |
系统性能Profiling(OnCPU、Mem、OffCPU) | 23.04 | openEuler 22.03 SP1, openEuler 23.09 |
线程级性能Profiling(java、C) | 23.06 | openEuler 22.03 SP1, openEuler 23.09 |
特性 | 发布时间 | 发布版本 |
---|---|---|
支持内核Release版本跨度兼容 | 23.12 | openEuler 22.03 SP3, openEuler 24.03 |
支持内核大版本跨度兼容 | 24.09 | openEuler 24.09 |
特性 | 发布时间 | 发布版本 |
---|---|---|
非侵入集成第三方探针 | 22.12 | openEuler 22.03 SP1 |
非侵入集成第三方eBPF源码 | 24.03 | openEuler 23.09 |
大语言驱动自动生成eBPF观测探针 | 24.09 | openEuler 24.09 |
特性 | 发布时间 | 发布版本 |
---|---|---|
支持Prometheus exporter对接 | 22.12 | openEuler 22.03 SP1 |
支持日志文件形式对接 | 22.12 | openEuler 22.03 SP1 |
支持kafka client形式对接 | 22.12 | openEuler 22.03 SP1 |
支持REST接口动态变更探针监控能力 | 23.06 | openEuler 22.03 SP1, openEuler 23.09 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。