简介

operations支持在peer或者orderer运行过程中,提供基于restful接口的运维服务。包括健康检查、日志level管理、指标metrics接口等。首先利用test-network启动一个测试网络。

配置

具体配置项可见sampleconfig/core.yaml和sampleconfig/orderer.yaml。

operations的启动

以peer节点为例,operations服务的启动在peer启动的过程中完成的,启动依赖配置如下:

func newOperationsSystem(coreConfig *peer.Config) *operations.System {
return operations.NewSystem(operations.Options{
Logger: flogging.MustGetLogger("peer.operations"),
ListenAddress: coreConfig.OperationsListenAddress,
Metrics: operations.MetricsOptions{
Provider: coreConfig.MetricsProvider,
Statsd: &operations.Statsd{
Network: coreConfig.StatsdNetwork,
Address: coreConfig.StatsdAaddress,
WriteInterval: coreConfig.StatsdWriteInterval,
Prefix: coreConfig.StatsdPrefix,
},
},
TLS: operations.TLS{
Enabled: coreConfig.OperationsTLSEnabled,
CertFile: coreConfig.OperationsTLSCertFile,
KeyFile: coreConfig.OperationsTLSKeyFile,
ClientCertRequired: coreConfig.OperationsTLSClientAuthRequired,
ClientCACertFiles: coreConfig.OperationsTLSClientRootCAs,
},
Version: metadata.Version,
})
}

包括监听地址、metrics相关配置、TLS配置等,即示例core.yaml或orderer.yaml中的配置。

version接口

curl --request GET '127.0.0.1:19051/version'

返回结果:

{"CommitSHA":"7f22e99","Version":"2.2.7"}

查看version接口的处理:

func (s *System) initializeVersionInfoHandler() {
versionInfo := &VersionInfoHandler{
CommitSHA: metadata.CommitSHA,
Version: metadata.Version,
}
s.mux.Handle("/version", s.handlerChain(versionInfo, false))
}

可知版本信息在metadata包内定义,查看Makefile文件如下:

# defined in common/metadata/metadata.go
METADATA_VAR = Version=$(BASE_VERSION)
METADATA_VAR += CommitSHA=$(EXTRA_VERSION)
METADATA_VAR += BaseDockerLabel=$(BASE_DOCKER_LABEL)
METADATA_VAR += DockerNamespace=$(DOCKER_NS)

在编译过程中将metadata写入。

日志level管理

查询请求:

curl --location --request GET '127.0.0.1:19051/logspec'

结果:

{"spec":"info"}

修改日志级别:

curl --request PUT '127.0.0.1:19051/logspec' --header 'Content-Type: application/json' --data '{ "spec": "info"}'

针对某个模块调整日志级别:

curl --request PUT '127.0.0.1:19051/logspec' --header 'Content-Type: application/json' --data '{ "spec": "gossip.discovery=debug"}'

此时gossip服务的discovery相关日志为debug级别,其他的仍为info级别。如果调用Get logspec,此时返回为

{"spec":"gossip.discovery=debug:info"}

代表gossip.discovery为debug日志,其余为info日志。

示例1:

curl --request PUT '127.0.0.1:19051/logspec' --header 'Content-Type: application/json' --data '{ "spec": "gossip.discovery=debug:ledgermgmt=info:debug"}'

健康检查

curl --request GET '127.0.0.1:19051/healthz'

结果:

{"status":"OK","time":"2022-07-19T16:30:14.507389245Z"}

可以用于存活探针。

指标

支持prometheus和statsd两种采集方式,statsd不了解,只讨论使用promethues采集指标的方式。在peer启动配置文件中添加配置如下:

- CORE_OPERATIONS_LISTENADDRESS=0.0.0.0:19051
- CORE_METRICS_PROVIDER=prometheus

然后访问19051端口的/metrics的接口即可得到节点中的指标数据。在promethues配置中添加monitor指向19051端口,即可在promethues中查询到指标数据。

operations使用研究的更多相关文章

  1. backup, file manipulation operations (such as ALTER DATABASE ADD FILE) and encryption changes on a database must be serialized.

    昨天在检查YourSQLDba备份时,发现有台数据库做备份时出现了下面错误信息,如下所示: <Exec>   <ctx>yMaint.ShrinkLog</ctx> ...

  2. windows 远程桌面研究

    最近因为一个监控相关的项目,深入研究了一下 windows 的 远程桌面的相关知识. 1. 如何让关闭了远程桌面连接的用户,对应的 session 立即退出 windows server. 大家使用 ...

  3. MATLAB 例子研究 Motion-Based Multiple Object Tracking

    这个例子是用来识别视频中多个物体运动的.我要研究的是:搞清楚识别的步骤和相应的算法,识别出物体运动的轨迹. 详细参见官方帮助文档,总结如下: 移动物体的识别算法:a background subtra ...

  4. 线程系列3---ThreadLocal类研究

    2013-12-23 17:44:44 Java为线程安全提供了一些工具类,如ThreadLocal类,它代表一个线程局部变量,通过把数据放在ThreadLocal中就可以让每个线程创建一个该变量的副 ...

  5. Redis源码研究--字典

    计划每天花1小时学习Redis 源码.在博客上做个记录. --------6月18日----------- redis的字典dict主要涉及几个数据结构, dictEntry:具体的k-v链表结点 d ...

  6. iOS多线程的初步研究(六)-- NSOperation

    iOS平台提供更高级的并发(异步)调用接口,让你可以集中精力去设计需完成的任务代码,避免去写与程序逻辑无关的线程生成.运行等管理代码.当然实质上是这些接口隐含生成线程和管理线程的运行,从而更加简洁地实 ...

  7. asp.net mvc4 Controller与Action执行过程的研究(学习笔记)

    当IIS收到一个http请求,把请求信息发给对应的HttpModel(实际是实现类UrlRoutingModule),在HttpModel中会注册HttpApplication 类中的PostReso ...

  8. C# 动态语言特性,dynamic 关键字研究

    1       动态语言简介 支持动态特性的语言现在大行其道,并且有继续增长的趋势.比如 Ruby 和 Python, 还有天王级的巨星 --- JavaScript. 现在一个程序员说自己对 Jav ...

  9. iOS多线程的初步研究(六)

    iOS多线程的初步研究(六) iOS平台提供更高级的并发(异步)调用接口,让你可以集中精力去设计需完成的任务代码,避免去写与程序逻辑无关的线程生成.运行等管理代码.当然实质上是这些接口隐含生成线程和管 ...

  10. geotrellis使用(三十四)矢量瓦片技术研究——矢栅一体化

    前言 本文所涉及技术与Geotrellis并无太大关系,仅是矢量瓦片前端渲染和加载技术,但是其实我这是在为Geotrellis的矢量瓦片做铺垫.很多人可能会说,Geotrellis为什么要搞矢量瓦片, ...

随机推荐

  1. JMeter创建上传文件脚本

    环境:Macbook10 ,apache-jmeter-4.0 1. 创建脚本:添加 -> Sampler -> HTTP请求 2.基本配置 3. 设置实现方式,这一步是关键的关键.... ...

  2. top usage

    https://www.cnblogs.com/dragonsuc/p/5512797.html

  3. dev随笔记录

    gridcontrolbandedGridviewPrintHeader = false(不显示列头)#region 勾选框全选或反选 List<string> islockList = ...

  4. js实现点击按钮或div显示与隐藏div

    var box = document.getElementById("box"); var btn = document.getElementById("btn" ...

  5. sql offset 优化

    // let groupSql = ` select id,jd_gcj02ll, wd_gcj02ll from ${tablename_qiye} where id between ${size ...

  6. bash脚本的判断语句之一

    开始学习bash的"编程"操作. 其实严格来说,这个脚本语言的语法是比较古老和特殊的,有很多不符合中国人习惯的东西. 因为在中国人的世界里,电脑键盘上面的使用shift才能输出来的 ...

  7. NC16644【字符串的展开】

    正确代码: #include <iostream>#include <algorithm>using namespace std;bool IsSame(char a, cha ...

  8. MySQL之中文数据问题

    随笔记录方便自己和同路人查阅. #------------------------------------------------我是可耻的分割线--------------------------- ...

  9. ctfshow web入门41

    这个题过滤了$.+.-.^.~使得异或自增和取反构造字符都无法使用,同时甚至过滤了字母和数字. 但是特意留了个或运算符|. 由此我们可以尝试从ascii为0-255的字符中,找到用或运算能得到我们可用 ...

  10. el-form不进行校验可能的原因

    可能原因 el-form至少需要:model="你的数据form",:rules='你的校验规则' 的属性: 只能校验el-input,不能对原始input进行校验 (大坑).