1 Star 0 Fork 84

wxm / gala-gopher

forked from openEuler / gala-gopher 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MulanPSL-2.0

gala-gopher

什么是gala-gopher

gala-gopher是gala项目内负责数据采集的组件,其为gala项目提供Metrics、Event、Perf等数据,便于gala项目完成系统拓扑的绘制和故障根因的定位。 gala-gopher是一款结合eBPF、java agent等非侵入可观测技术的观测平台,探针是gala-gopher用于观测和采集数据的主要工具,通过探针式架构gala-gopher可以轻松实现增加、减少探针。

观测范围

系统性能

系统层资源可能会影响应用性能,使用gala-gopher将提供Node、Container、Device等维度的系统性能观测能力。包括:

  • CPU性能:参见CPU性能指标,将提供CPU粒度的实时性能指标。
  • 内存性能:参见内存性能指标,参见系统内存、buffer、cache、dentry等多种资源实时指标。
  • 网络性能:参见网卡性能指标协议栈性能统计,包括主机内TCP连接数量、接收报文数量、网卡收发字节数、丢包数等。
  • I/O性能:参见Block性能指标磁盘指标,包括磁盘读写速率、使用率、吞吐量等指标,以及block层驱动、设备的时延、错误统计。
  • 容器性能:参见容器性能指标,提供容器维度CPU、内存、I/O、网络多维度可观测数据。

网络监控

通过网络监控能力,可以轻松获取如下信息:

  • 集群内微服务间TCP流量拓扑:提供进程粒度TCP流量监控,结合gala-spider可以轻松获取集群内微服务间TCP拓扑。
  • DNS访问监控:参考DNS访问监控,提供进程内DNS域名访问的平均、最大时延、错误率。
  • TCP/IP监控:提供TCP连接粒度的异常监控,包括重传、丢包、TCP oom、收发RST等异常指标;提供Socket异常监控,包括listen队列溢出、syn队列溢出、建链失败次数等统计信息。

应用(微服务)访问性能监控

云原生场景会部署大量微服务,微服务之间访问性能的波动会直接影响整体业务效果,使用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、内存、调度等多个方面。

  • TCP性能:提供TCP窗口、RTT、SRTT、reordering、ato等性能指标;
  • I/O性能:提供进程维度的 I/O操作字节数统计、FD资源占用统计、文件系统(vfs/ext4/overlay/tmpfs)层时延统计,大小I/O操作数量统计、BIO时延、错误统计(虚拟化QEMU进程有意义)等;
  • 内存:提供进程维度的pagefault、swap区、脏页、虚拟内存、物理内存等统计。
  • JVM监控:提供jvm线程、java类加载、jvm内存、jvm buffer、gc次数/花费时间等统计。
  • DNS监控:基于Glibc接口(gethostbyname/getaddrinfo等)获取应用DNS访问性能。

性能Profiling

性能火焰图是常用的性能问题诊断工具,常见的性能火焰图工具(perf、ansyc-profier)存在底噪大、精细化不够、多语言能力不够等问题。

gala-gopher提供持续、低底噪、多实例形式的性能Profiling能力,覆盖C/C++、Go、Java(最佳效果时,推荐加上-XX:+PreserveFramePointer启动参数)语言。

Profiling示例

使用方法参考这里

kafka监控

kafka通常作为分布式应用场景中的消息中心,现有监控工具对kafka topic的观测、跟踪缺乏有效手段,gala-gopher针对此问题,提供自动化的kafka监控能力。提供能力如下:

  • Topic流监控:提供topic 生产者、消费者的IP、Port信息,结合gala-spider,可以绘制出topic流视图。

  • Topic性能:提供topic维度的吞吐量性能。

    约束:不支持加密场景。

nginx/haproxy监控

nginx/haproxy通常作为云原生应用之间的负载均衡,网络流量经过负载均衡之后,现有监控工具无法有效观测云原生应用之间的真实流量路径。gala-gopher为此提供面向负载均衡的网络流量观测能力:

  • Nginx负载分担监控:提供nginx负载分担会话观测能力,基于负载分担会话,结合gala-spider可以绘制出云原生应用之间真实流量路径。
  • Haproxy负载分担监控:提供haproxy负载分担会话观测能力,基于负载分担会话,结合gala-spider可以绘制出云原生应用之间真实流量路径。

负载分担流量监控

Redis/PostgreSQL监控

Redis/PostgreSQL常用于为应用提供数据存储服务,现有性能监控工具(拨测、打点)存在失真、误差等问题,gala-gopher针对redis/PostgreSQL应用,提供非侵入的性能观测能力。除此以外,这类应用性能经常受网络、I/O影响,gala-gopher提供针对这些应用的网络、I/O监控能力。

  • Redis性能监控:提供精细化的(具体到某个TCP)redis时延监控能力。(注意不支持加密场景)
  • PostgreSQL性能监控:提供精细化的(具体到某个TCP)Postgre时延监控能力。

备注:与应用访问性能监控的区别在于,该观测精度略低,但是其底噪更低。

软件架构

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方式:适用于无容器的单机观测场景,支持OS版本:openEuler 22.03 LTS SP1及以上。
  • 单机容器方式:适用于支持容器化的单机观测场景,支持OS版本:openEuler全系LTS版本(推荐openEuler 22.03 LTS SP1及以上)。
  • k8s集群方式:适用于观测云原生集群多节点场景,支持OS版本:openEuler全系LTS版本(推荐openEuler 22.03 LTS SP1及以上)。

RPM方式

  1. 获取rpm包

    发行版仓库选择合适的版本(推荐最新版),下载对应架构的rpm包。

  2. 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
  3. 启动服务

    通过 systemd 启动后台服务:

    systemctl start gala-gopher.service

单机容器方式

  1. 获取官方容器镜像

    # 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服务再重试。

  2. 准备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文件。

  3. 创建并运行容器

    以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

K8S 集群方式

k8s环境部署指导

安装验证

完成安装后,可执行如下命令进行验证,如果命令执行未报错,则表示安装已成功。

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语句],每个探针一行,例如:

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

数据获取与集成

系统集成API及方式

规格与约束

规格与约束

如何贡献

基于源码构建

仅编译二进制

构建环境要求:openEuler-22.03-LTS-SP1及以上,并配置OS版本配套的openEuler repo源,至少包含everything、update、EPOL三个目录(具体配置方法可参考openEuler社区文档《管理员指南》)。

下载仓库源码到本地,确认切换到master分支,然后在源码的build目录下执行以下构建动作:

  1. 安装构建依赖包

    该步骤会检查安装架构感知框架所有的编译依赖包,涉及三方探针编译、运行的依赖包会在编译构建中检查安装。

    # sh build.sh --check
  2. 构建

    # sh build.sh --clean
    
    # sh build.sh --release     # RELEASE模式
    # 或者
    # sh build.sh --debug       # DEBUG模式

    注:DEBUG模式与RELEASE模式在功能上没有差别,DEBUG模式框架测和探针支持debug打印,便于本地调试与问题定位。

  3. 安装

    # sh install.sh
  4. 运行

    # gala-gopher

构建rpm包

构建环境要求:openEuler-22.03-LTS-SP1及以上,并配置OS版本配套的openEuler repo源,至少包含everything、update、EPOL三个目录(具体配置方法可参考openEuler社区文档《管理员指南》)。

下载仓库源码到本地,确认切换到master分支,取出源码根目录下的gala-gopher.spec后执行如下构建动作:

  1. 安装rpm-build以及构建依赖包(参照编译二进制)

    # yum install rpm-build
    # sh build.sh --check
  2. 生成源码压缩包并将其放入/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
  3. 构建rpm包

    rpmbuild -ba gala-gopher.spec

等待构建完成后,rpm包文件被存放在/root/rpmbuild/RPMS/下对应架构目录内,示例如下:

/root/rpmbuild/RPMS/x86_64/gala-gopher-2.0.0-1.x86_64.rpm

构建容器镜像

  1. 获取如下文件,放在同一目录下:

  2. 在目录中执行如下命令构建出容器镜像(以x86_64为例):

    # docker build -f Dockerfile_x86_64 -t gala-gopher:2.0.0 .
    1. 保存/导入容器镜像

    生成容器镜像后可以通过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

探针开发

探针开发指南

Q&A

eBPF如何更好的运行在java场景

场景1:持续性能Profiling

gala-gopher提供持续性能Profiling可以持续监控应用的OnCPU、OffCPU、Memory Alloc等性能。监控应用程序使用了eBPF周期性或事件触发式以持续收集应用堆栈信息。

通过java agent获取java函数符号表,eBPF获取堆栈信息,两者结合完成java场景的持续profiling。

java场景性能Profiling

场景2:微服务访问性能监控

gala-gopher提供的微服务访问性能监控可以非侵入、多语言的完成L7层流量性能监控能力。在java场景中,java应用会使用JSSE类库进行加密通信,eBPF在内核层获取到L7层流量是加密态,无法完成解析以及性能监控。通过java agent字节码注入技术,将JSSEProbeAgent.jar attach至目标jvm进程完成明文RPC消息的获取,通过临时文件读入L7。

java场景性能RPC密文观测

如何解决跨版本兼容性问题

参考这里

路线图

巡检能力

特性 发布时间 发布版本
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

特性 发布时间 发布版本
系统性能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
木兰宽松许可证, 第2版 木兰宽松许可证, 第2版 2020年1月 http://license.coscl.org.cn/MulanPSL2 您对“软件”的复制、使用、修改及分发受木兰宽松许可证,第2版(“本许可证”)的如下条款的约束: 0. 定义 “软件”是指由“贡献”构成的许可在“本许可证”下的程序和相关文档的集合。 “贡献”是指由任一“贡献者”许可在“本许可证”下的受版权法保护的作品。 “贡献者”是指将受版权法保护的作品许可在“本许可证”下的自然人或“法人实体”。 “法人实体”是指提交贡献的机构及其“关联实体”。 “关联实体”是指,对“本许可证”下的行为方而言,控制、受控制或与其共同受控制的机构,此处的控制是指有受控方或共同受控方至少50%直接或间接的投票权、资金或其他有价证券。 1. 授予版权许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其“贡献”,不论修改与否。 2. 授予专利许可 每个“贡献者”根据“本许可证”授予您永久性的、全球性的、免费的、非独占的、不可撤销的(根据本条规定撤销除外)专利许可,供您制造、委托制造、使用、许诺销售、销售、进口其“贡献”或以其他方式转移其“贡献”。前述专利许可仅限于“贡献者”现在或将来拥有或控制的其“贡献”本身或其“贡献”与许可“贡献”时的“软件”结合而将必然会侵犯的专利权利要求,不包括对“贡献”的修改或包含“贡献”的其他结合。如果您或您的“关联实体”直接或间接地,就“软件”或其中的“贡献”对任何人发起专利侵权诉讼(包括反诉或交叉诉讼)或其他专利维权行动,指控其侵犯专利权,则“本许可证”授予您对“软件”的专利许可自您提起诉讼或发起维权行动之日终止。 3. 无商标许可 “本许可证”不提供对“贡献者”的商品名称、商标、服务标志或产品名称的商标许可,但您为满足第4条规定的声明义务而必须使用除外。 4. 分发限制 您可以在任何媒介中将“软件”以源程序形式或可执行形式重新分发,不论修改与否,但您必须向接收者提供“本许可证”的副本,并保留“软件”中的版权、商标、专利及免责声明。 5. 免责声明与责任限制 “软件”及其中的“贡献”在提供时不带任何明示或默示的担保。在任何情况下,“贡献者”或版权所有者不对任何人因使用“软件”或其中的“贡献”而引发的任何直接或间接损失承担责任,不论因何种原因导致或者基于何种法律理论,即使其曾被建议有此种损失的可能性。 6. 语言 “本许可证”以中英文双语表述,中英文版本具有同等法律效力。如果中英文版本存在任何冲突不一致,以中文版为准。 条款结束 如何将木兰宽松许可证,第2版,应用到您的软件 如果您希望将木兰宽松许可证,第2版,应用到您的新软件,为了方便接收者查阅,建议您完成如下三步: 1, 请您补充如下声明中的空白,包括软件名、软件的首次发表年份以及您作为版权人的名字; 2, 请您在软件包的一级目录下创建以“LICENSE”为名的文件,将整个许可证文本放入该文件中; 3, 请将如下声明文本放入每个源文件的头部注释中。 Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details. Mulan Permissive Software License,Version 2 Mulan Permissive Software License,Version 2 (Mulan PSL v2) January 2020 http://license.coscl.org.cn/MulanPSL2 Your reproduction, use, modification and distribution of the Software shall be subject to Mulan PSL v2 (this License) with the following terms and conditions: 0. Definition Software means the program and related documents which are licensed under this License and comprise all Contribution(s). Contribution means the copyrightable work licensed by a particular Contributor under this License. Contributor means the Individual or Legal Entity who licenses its copyrightable work under this License. Legal Entity means the entity making a Contribution and all its Affiliates. Affiliates means entities that control, are controlled by, or are under common control with the acting entity under this License, ‘control’ means direct or indirect ownership of at least fifty percent (50%) of the voting power, capital or other securities of controlled or commonly controlled entity. 1. Grant of Copyright License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable copyright license to reproduce, use, modify, or distribute its Contribution, with modification or not. 2. Grant of Patent License Subject to the terms and conditions of this License, each Contributor hereby grants to you a perpetual, worldwide, royalty-free, non-exclusive, irrevocable (except for revocation under this Section) patent license to make, have made, use, offer for sale, sell, import or otherwise transfer its Contribution, where such patent license is only limited to the patent claims owned or controlled by such Contributor now or in future which will be necessarily infringed by its Contribution alone, or by combination of the Contribution with the Software to which the Contribution was contributed. The patent license shall not apply to any modification of the Contribution, and any other combination which includes the Contribution. If you or your Affiliates directly or indirectly institute patent litigation (including a cross claim or counterclaim in a litigation) or other patent enforcement activities against any individual or entity by alleging that the Software or any Contribution in it infringes patents, then any patent license granted to you under this License for the Software shall terminate as of the date such litigation or activity is filed or taken. 3. No Trademark License No trademark license is granted to use the trade names, trademarks, service marks, or product names of Contributor, except as required to fulfill notice requirements in Section 4. 4. Distribution Restriction You may distribute the Software in any medium with or without modification, whether in source or executable forms, provided that you provide recipients with a copy of this License and retain copyright, patent, trademark and disclaimer statements in the Software. 5. Disclaimer of Warranty and Limitation of Liability THE SOFTWARE AND CONTRIBUTION IN IT ARE PROVIDED WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED. IN NO EVENT SHALL ANY CONTRIBUTOR OR COPYRIGHT HOLDER BE LIABLE TO YOU FOR ANY DAMAGES, INCLUDING, BUT NOT LIMITED TO ANY DIRECT, OR INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING FROM YOUR USE OR INABILITY TO USE THE SOFTWARE OR THE CONTRIBUTION IN IT, NO MATTER HOW IT’S CAUSED OR BASED ON WHICH LEGAL THEORY, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 6. Language THIS LICENSE IS WRITTEN IN BOTH CHINESE AND ENGLISH, AND THE CHINESE VERSION AND ENGLISH VERSION SHALL HAVE THE SAME LEGAL EFFECT. IN THE CASE OF DIVERGENCE BETWEEN THE CHINESE AND ENGLISH VERSIONS, THE CHINESE VERSION SHALL PREVAIL. END OF THE TERMS AND CONDITIONS How to Apply the Mulan Permissive Software License,Version 2 (Mulan PSL v2) to Your Software To apply the Mulan PSL v2 to your work, for easy identification by recipients, you are suggested to complete following three steps: i Fill in the blanks in following statement, including insert your software name, the year of the first publication of your software, and your name identified as the copyright owner; ii Create a file named “LICENSE” which contains the whole context of this License in the first directory of your software package; iii Attach the statement to the appropriate annotated syntax at the beginning of each source file. Copyright (c) [Year] [name of copyright holder] [Software Name] is licensed under Mulan PSL v2. You can use this software according to the terms and conditions of the Mulan PSL v2. You may obtain a copy of Mulan PSL v2 at: http://license.coscl.org.cn/MulanPSL2 THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE. See the Mulan PSL v2 for more details.

简介

A low-overhead eBPF-based probes framework 展开 收起
MulanPSL-2.0
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/tjwangxm/gala-gopher.git
git@gitee.com:tjwangxm/gala-gopher.git
tjwangxm
gala-gopher
gala-gopher
master

搜索帮助