同步操作将从 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、ansyc-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为此提供面向负载均衡的网络流量观测能力:
Redis/PostgreSQL常用于为应用提供数据存储服务,现有性能监控工具(拨测、打点)存在失真、误差等问题,gala-gopher针对redis/PostgreSQL应用,提供非侵入的性能观测能力。除此以外,这类应用性能经常受网络、I/O影响,gala-gopher提供针对这些应用的网络、I/O监控能力。
备注:与应用访问性能监控的区别在于,该观测精度略低,但是其底噪更低。
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。
参考这里。
获取rpm包
gala-gopher目前已在openEuler 21.09(已停止维护)/openEuler 22.09(已停止维护)/openEuler 22.03-LTS-SP1发布,可以通过配置以上发布版本的正式repo源来获取rpm包(以openEuler 22.03-LTS-SP1为例,需要配置完整的2203 lts的源,很多依赖包是在everything和epol里);对于其他发布版本我们提供了以下方式来获取rpm包:
(1)方法一:OBS 链接,网页手动下载对应架构的rpm包
openEuler-20.03-LTS-SP1 : https://build.openeuler.openatom.cn/package/show/home:zpublic:branches:openEuler:20.03:LTS:SP1/gala-gopher
openEuler-22.03-LTS : https://build.openeuler.openatom.cn/package/show/home:zpublic:branches:openEuler:22.03:LTS/gala-gopher
openEuler-22.03-LTS-SP1 : https://build.openeuler.openatom.cn/package/show/home:zpublic:branches:openEuler:22.03:LTS:SP1/gala-gopher
(2)方法二:使用命令编译构造rpm包 构造rpm包时,主要的文件为gala-gopher.spec,需要根据所在的机器进行以下几点修改
1:%define vmlinux_ver 5.10.0-126.0.0.66.oe2203.%{_arch} 需要从gala-gopher项目src目录进入,src/probes/extends/ebpf.probe/src/include目录中,根据内核版本、CPU架构选择相应的版本号,该版本号与sh build.sh --debug后填写的版本号是一致的
2:Version字段代表版本号,需要与gala-gopher目前的文件名称后的版本号是一致的
mv gala-gopher gala-gopher-2.0.0
tar czf gala-gopher-2.0.0.tar.gz gala-gopher-2.0.0 tar包需要与目录名保持一致
Version后的版本号需要与指定的版本号一致,修改Version后的版本号为2.0.0,即Version:2.0.0
3:安装rpm-build
yum install rpm-build
4:新建目录/root/rpmbuild/SOURCES并将tar包放入目录/root/rpmbuild/SOURCES目录中
mv gala-gopher-2.0.0.tar.gz /root/rpmbuild/SOURCES
5:构建rpm包
rpmbuild -ba gala-gopher.spec
执行目录后,查看编译的输出,看到生成的rpm包文件被存放在/root/rpmbuild/RPMS/x86_64/目录下,看一下示例的输出
/root/rpmbuild/RPMS/x86_64/gala-gopher-debugsource-2.0.0-1.ky10.x86_64.rpm
/root/rpmbuild/RPMS/x86_64/gala-gopher-2.0.0-1.ky10.x86_64.rpm
/root/rpmbuild/RPMS/x86_64/gala-gopher-debuginfo-2.0.0-1.ky10.x86_64.rpm
rpm安装
(1)如果是通过OBS 链接从网页手动下载对应架构的rpm包,则rpm安装的方法
yum install gala-gopher
注:1. 上面指令中 gala-gopher 应填写完整包名,如gala-gopher-1.0.2-2.oe2203.x86_64.rpm。2. 当使用yum指令前,用户应自行配置yum源。
(2)如果是通过rpmbuild命令编译构建的rpm包,则rpm安装的方法
yum install /root/rpmbuild/RPMS/x86_64/gala-gopher-2.0.0-1.ky10.x86_64.rpm
启动服务
通过 systemd 启动后台服务:
systemctl start gala-gopher.service
获取容器镜像
获取官方容器镜像
根据系统架构和版本从官方仓库拉取对应tag的gala-gopher官方容器镜像(以openEuler 22.03 LTS SP1为例),目前支持的镜像版本tag有:20.03-lts-sp1,22.03-lts,22.03-lts-sp1,kylin-v10-sp1(仅支持x86_64),kylin-v10-sp3(仅支持x86_64):
# x86
docker pull hub.oepkgs.net/a-ops/gala-gopher-x86_64:22.03-lts-sp1
# aarch64
docker pull hub.oepkgs.net/a-ops/gala-gopher-aarch64:22.03-lts-sp1
注:如果拉取镜像的过程中出现"X509: certificate signed by unknown authority"错误,如果没有文件/etc/docker/daemon.json,则需要新建文件/etc/docker/daemon.json,添加内容如下
"hub.oepkgs.net"加入到/etc/docker/daemon.json中的"insecure-registries"项后重启docker服务再重试。
构建容器镜像
获取gala-gopher的rpm包,获取方式详见RPM方式部署。
用于生成容器镜像的Dockerfile文件归档在build目录,生成方法详见如何生成gala-gopher容器镜像。
创建并运行容器
启动容器
执行如下命令(以创建openEuler 22.03 LTS SP1 x86版本、名字为gala-gopher的容器为例):
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:22.03-lts-sp1
其中,GOPHER_HOST_PATH环境变量用于指定容器外根目录"/"映射到gala-gopher容器内的目录,以便gala-gopher能够正常访问宿主机上的关键文件,必配且建议保持默认/host。
另外可通过如下环境变量配置gala-gopher,若不指定,则使用配置文件默认配置:
通过docker ps查看容器是否运行成功:
[root@localhost]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
0fb3cad0df40 hub.oepkgs.net/a-ops/gala-gopher-x86_64:22.03-lts-sp1 "/entrypoint.sh /usr…" 6 days ago 3 days ago gala-gopher
获取数据
容器启动后,通过默认的8888端口获取数据来验证gala-gopher是否运行成功,如果启动容器时未通过GOPHER_PROBES_INIT参数指定默认开启的探针,则需要通过REST API开启探针后再获取数据:
[root@localhost]# curl http://localhost:8888
...
gala_gopher_udp_que_rcv_drops{tgid="1234",s_addr="192.168.12.34",machine_id="xxxxx",hostname="eaxxxxxxxx02"} 0 1656383357000
...
有指标数据输出则证明gala-gopher运行成功(除了火焰图探针和profiling这两个探针,别的探针采集的数据都可以通过8888端口获取到数据)。
用户可以选择rpm包或容器镜像方法部署gala-gopher
脚本下载
首先需要下载离线资源下载脚本和辅助脚本(两种方法均需要),将两个脚本上传到机器上后执行命令(以下两种命令之一)完成相关离线资源下载,下载内容会存放在当前目录的子目录gala_deploy_gopher下。
运行脚本下载资源
对应版本gala-gopher及依赖rpm包下载
sh download_offline_res.sh gopher [os_version] [os_arch]
os_version、os_arch 可同时配置(或同时使用默认值):
os_version: 指定下载该操作系统版本 gala-gopher 软件包。未配置该项时,使用当前系统版本。支持版本列表:openEuler-22.03-LTS-SP1 openEuler-22.03-LTS openEuler-20.03-LTS-SP1 kylin
os_arch: 指定下载该架构 gala-gopher 软件包。未配置该项时,使用当前系统架构。支持架构列表:aarch64 x86_64
gala-gopher容器镜像下载
指定下载 gala-gopher docker 镜像 tar 和 gala-gopher 配置文件(docker 运行 gala-gopher, 将配置文件映射到宿主机上)。
sh download_offline_res.sh gopher
下载 tar 包存放在 gala_deploy_gopher 目录下,文件名格式为gala-gopher-[os_arch]:[os_tag].tar
。下载内容如下:
gala-gopher-aarch64:22.03-lts-sp1.tar
工具一键部署
与上面介绍的两种下载内容对应,分别提供两种gala-gopher部署方法。部署前需将gala_deploy_gopher目录下的所有文件及部署脚本和辅助脚本上传到目标生产节点机器上,执行如下命令安装、配置、启动gala-gopher服务,-S选项来指定离线安装包所在的目录。
sh deploy.sh gopher -K <kafka服务器地址> -p <pyroscope服务器地址> -S <离线安装包所在目录>
sh deploy.sh gopher -K <kafka服务器地址> -p <pyroscope服务器地址> -S <离线安装包所在目录> --docker
选项详细说明:
选项 | 参数说明 | 是否必配 |
---|---|---|
-K|--kafka | 指定gala-gopher上报采集数据的目标kakfa服务器地址(一般来说是管理节点的IP),当不配置该选项时,kafka服务器地址使用localhost | 否 |
-p|--pyroscope | 指定gala-gopher开启火焰图功能后火焰图上传到的pyroscope服务器地址(用于对接前端界面显示)(一般来说是管理节点的IP),当不配置该选项时,pyroscope服务器地址使用localhost | 否 |
-S|--srcdir | 离线部署时使用该选项来指定gala-gopher以及其依赖包所在的目录 | 离线部署时必配 |
--docker | 指定以 docker 方式部署 gala-gopher | 否 |
不论以什么方式进行部署,最终都需要验证gala-gopher进程是否启动成功,可以使用命令 ps -ef | grep gala-gopher
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等)
建议在最低openEuler-20.03-LTS-SP1的环境执行编译动作,这是因为gala-gopher中ebpf探针编译依赖clang和llvm,大多数的bpf功能需要clang 10或者更高版本才可以正常工作,而20.03-SP1以下的发布版本中clang版本较低(低于10)。
首先确保本地已有仓库源码,然后在gala-gopher下的build目录下执行安装工作。
安装依赖包
该步骤会检查安装架构感知框架所有的依赖包,涉及三方探针编译、运行的依赖包会在编译构建中检查安装。
# sh build.sh --check
构建
# sh build.sh --clean
# sh build.sh --release # RELEASE模式
# 或者
# sh build.sh --debug # DEBUG模式
注:在编译过程中出现如下信息,表示bpf探针编译需要的vmlinux.h文件缺失;
vmlinux.h文件包含了系统运行Linux内核源码中使用的所有类型定义,可以利用bpftool工具生成;我们已经预生成了几个openEuler发布版本的vmlinux.h文件在src\probes\extends\ebpf.probe\src\include
目录,请根据内核版本、CPU架构选择相应的文件,并手动软链接到vmlinux.h;例如:
[root@master ~]# uname -r
4.19.90-2012.5.0.0054.oe1.x86_64
[root@master ~]# ln -s linux_4.19.90-2012.5.0.0053.oe1.x86_64.h vmlinux.h
生成vmlinux.h文件后再次执行构建命令。
安装
# sh install.sh
运行
# gala-gopher
我们提供了OBS地址,用于用户编译最新的rpm包。当用户需要最新的rpm包时,可以按照如下步骤自行编译出最新版本的rpm包。
OBS路径如下:
openEuler-20.03-LTS-SP1 : https://build.openeuler.openatom.cn/package/show/home:zpublic:branches:openEuler:20.03:LTS:SP1/gala-gopher
openEuler-22.03-LTS : https://build.openeuler.openatom.cn/package/show/home:zpublic:branches:openEuler:22.03:LTS/gala-gopher
openEuler-22.03-LTS-SP1 : https://build.openeuler.openatom.cn/package/show/home:zpublic:branches:openEuler:22.03:LTS:SP1/gala-gopher
编译前需要选择对应版本的路径,并通过 Branch package
按钮拉出个人分支包,如下图所示:
注:branch操作仅需在第一次编包的时候执行一次,后续可以直接在 个人已有项目 处找到,直接执行后续的打包、上传编译等步骤。
源码打包
# 需要先将gala-gopher文件夹名重命名为gala-gopher-1.0.0
# 然后打成tar包
[root@master code]# tar zcvf gala-gopher-1.0.0.tar.gz gala-gopher-1.0.0/
tar包上传并触发编译
还是以编译能够在openEuler-20.03-LTS环境运行的rpm包为例,需要在外网操作。参考如下视频:
右侧 Build Results
框会显示编译结果,building
表示还在编译中,failed
表示编译失败,succeeded
表示编译成功,编译成功则可以点击获取最新的rpm包。
安装
[root@master ~]# yum localinstall gala-gopher-1.0.0-2.oe1.x86_64.rpm
运行
# 前台运行
[root@master ~]# gala-gopher
# 通过systemd启动(推荐)
[root@master ~]# systemctl start gala-gopher.service
特性 | 发布时间 | 发布版本 |
---|---|---|
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 |
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。