Molten —— 应用透明链路追踪工具
Molten 是应用透明链路追踪工具。
Molten 追踪php核心调用库运行时信息并且按照zipkin/optracing格式输出信息。
Molten 提供多种sapi, 多种采样类型, 上报追踪状态, 模块控制和多种数据落地 类型等功能。
依赖于Molten 很容易构建基于php语言的分布式全链路追踪系统 目前已经运行在生产环境上千台机器上。
安装
以下是你需要做的安装molten在你的系统上。
phpize ./configure make && make install
make install
复制 molten.so
到确切的位置, 但是你还需要开启模块在php配置中,编辑你自己的php.ini或者添加molten.ini在/etc/php5/conf.d
, 并且添加如下内容:extension=molten.so
。
在./configure
阶段, 你也可以添加 --enable-zipkin-header=yes
支持zipkin B3 header。
快速开始
cd example sh run.sh
在浏览器中打开 http://127.0.0.1:9411/zipkin/
, 能够看见链路信息。
如果你认为上述太简单,你可以做下面的操作。
cd example sh complex.sh
怎么样,是不是很酷。
注意
如果没有看到详细信息,那么EndTime选项中添加1小时。
配置
基础配置
molten.enable
1开启0关闭, 默认 1
。
molten.service_name
设置应用服务名, 默认default
。
molten.tracing_cli
1追踪cli模式下信息, 0关闭, 默认0
。
采样配置
molten.sampling_type
类型类型, 1采样率控制, 2通过每分钟request数, 默认是1
。
molten.sampling_request
采样类型是请求数采样,每分钟的采样请求数, 默认是10
。
molten.sampling_rate_base
采样类型是采样率时,每个请求的采样几率, 默认是256
。
控制模块配置
molten.notify_uri
通知管理中心的uri。
上报模块配置
上报模块使用和数据模块相同的输出类型。
molten.report_interval
数据模块调用间隔, 默认 60
。
molten.report_limit
数据上报请求上限, 默认 100
。
数据模块
molten.sink_type
数据落地类型, 1
写入文件, 文件地址依赖molten.sink_log_path
, 2
写入到标准输出, 3
写入到syslog中, 4
通过curl发送, 发送地址依赖 molten.sink_http_uri
.
molten.output_type
输出全部追踪块(span)(1
) 或者一行输出一个块(2
)。
molten.sink_log_path
写入文件地址。
molten.sink_http_uri
发送http地址。
molten.sink_syslog_unix_socket
发送日志到syslog udp unixdomain日志收集源中。
追踪块配置
molten.span_format
追踪块格式(span), 不同的追踪系统选择zipkin
或者 zipkin_v2
或者 opentracing
。
函数
molten_span_format()
获取当前追踪系统span格式, 返回zipkin或者opentracing字符串。
molten_get_traceid()
获取当前上下文的traceiid,返回16进制的字符串。
molten_set_traceid($trace_id)
设置当前上下文的额traceiid, 无返回。
验证
php -d extension=molten.so -d molten.enable=1 -d molten.sink_type=2 -d molten.tracing_cli=1 -d molten.sampling_rate=1 -r '$c=curl_init("http://localhost:12345");curl_exec($c);'
可以看到如下输出:
[{"traceId":"%s","name":"php_curl","version":"php-4","id":"1.1","parentId":"1","timestamp":%d,"duration":%d,"annotations":[{"value":"cs","timestamp":%d,"endpoint":{"serviceName":"%s","ipv4":"%s"}},{"value":"cr","timestamp":%d,"endpoint":{"serviceName":"%s","ipv4":"%s"}}],"binaryAnnotations":[{"key":"http.url","value":"http:\/\/localhost:12345\/","endpoint":{"serviceName":"%s","ipv4":"%s"}},{"key":"error","value":"Failed connect to localhost:12345; Connection refused","endpoint":{"serviceName":"%s","ipv4":"%s"}}]},{"traceId":"%s","name":"cli","version":"php-4","id":"1","timestamp":%d,"duration":%d,"annotations":[{"value":"sr","timestamp":%d,"endpoint":{"serviceName":"%s","ipv4":"%s"}},{"value":"ss","timestamp":%d,"endpoint":{"serviceName":"%s","ipv4":"%s"}}],"binaryAnnotations":[{"key":"path","value":"-","endpoint":{"serviceName":"%s","ipv4":"%s"}}]}]
功能
从上述配置中,你可以看到我们提供的功能。
拦截器
molten 拦截 curl,pdo,mysqli,redis,mongodb,memcached扩展,构建运行时追踪信息. 支持全链路追踪功能, molten 替换了curl_exec,curl_setopt,curl_setopt_array函数, 并且在请求中添加了链路头(x-w-traceid, x-w-spanid and so on)。
定制化的链路格式, 支持两个流行格式(zipkin
和 opentracing
)。
采样
两种不同的采样方式并且能够通过控制模块进行修改。
数据落地
molten当前支持3种数据落地方式,标准输出,文件,http。并且能够选择输出的位置。
控制
使用http协议控制探针的行为。
查看molten的状态, 通过GET方法请求http://domain/molten/status
。
输出内容如下,已经适配了prometheus格式。
# HELP molten_request_all Number of all request. # TYPE molten_request_all counter molten_request_all %d # HELP molten_request_capture Number of request be capture. # TYPE molten_request_capture counter molten_request_capture %d # HELP molten_sampling_type the type of sampling. # TYPE molten_sampling_type gauge molten_sampling_type %d # HELP molten_sampling_rate the rate of sampling. # TYPE molten_sampling_rate gauge molten_sampling_rate %d # HELP molten_sampling_request the request be capture one min. # TYPE molten_sampling_request gauge molten_sampling_request %d
修改molten采样方式, 使用POST方法请求http://domain/molten/status
。
数据是json格式,字段和配置项中的含义是一致的。
{"enable":1,"samplingType":2,"samplingRate":20,"samplingRequest":100}
上报
上报模块能够记录,molten并没有采样样到的关键数据信息。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
每日一博 | 别再用 if-else 了,用注解去代替他吧
本文来自谢英豪同学的投稿,希望大家读完能有所收获。 策略模式 经常在网上看到一些名为“别再if-else走天下了”,“教你干掉if-else”等之类的文章,大部分都会讲到用策略模式去代替if-else。策略模式实现的方式也大同小异。主要是定义统一行为(接口或抽象类),并实现不同策略下的处理逻辑(对应实现类)。客户端使用时自己选择相应的处理类,利用工厂或其他方式。 注解实现 本文要说的是用注解实现策略模式的方式,以及一些注意点。话不多说,还是以最常 见的订单处理为例。首先定义这样一个订单实体类: @DatapublicclassOrder{/***订单来源*/privateStringsource;/***支付方式*/privateStringpayMethod;/***订单编号*/privateStringcode;/***订单金额*/privateBigDecimalamount;//...其他的一些字段} 假如对于不同来源(pc端、移动端)的订单需要不同的逻辑处理。项目中一般会有OrderService这样一个类,如下,里面有一坨if-else的逻辑,目的是根据订单的来源的做不同的...
- 下一篇
OSCHINA 编辑器更新:一键转换 Markdown、增加 emoji 选择弹框
作者:yang羊羊羊 原文:https://my.oschina.net/yanglx/blog/5252332 📢OSCHINA 编辑器迎来重大更新! 亮点 投递新闻(或软件)支持 Markdown 支持插入视频(嵌入 iframe 代码、或直接输入视频源地址) 增加 emoji 选择弹框 增加数学公式编辑和预览 1. 投递新闻(或软件)支持 Markdown 此功能可一键将 Markdown 文本转换成 HTML 文本! 投递新闻(或软件)时,可直接复制 Markdown 文本到编辑器。如果编辑器识别到文本包含 Markdown 语法,会提示是否进行转换,点击转换即可将 Markdown 文本转换为 HTML 文本。 2. 支持插入视频 目前支持通过两种方式插入视频。 2.1 直接输入「视频源」地址 点击工具栏的「视频」按钮,在弹出框输入视频源地址,配置所需的属性如宽度、高度(可选),点击确定即可在编辑器嵌入并预览视频。 ※ 注意:OSCHINA 暂不支持直接上传视频,请先将视频上传至自己的服务器或者上传到其他视频平台。 通过直接输入「视频源」地址来嵌入视频的示例如下: 2.2...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- 2048小游戏-低调大师作品
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Red5直播服务器,属于Java语言的直播服务器
- Linux系统CentOS6、CentOS7手动修改IP地址
- CentOS7,8上快速安装Gitea,搭建Git服务器
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7