Skip to content
项目
群组
代码片段
帮助
当前项目
正在载入...
登录 / 注册
切换导航面板
G
go-ipfs
概览
概览
详情
活动
周期分析
版本库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
统计图
问题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
日程表
图表
维基
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
图像
聊天
创建新问题
作业
提交
问题看板
Open sidebar
jihao
go-ipfs
Commits
0d56a486
Unverified
提交
0d56a486
authored
10月 31, 2018
作者:
Steven Allen
提交者:
GitHub
10月 31, 2018
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #5706 from ipfs/fix/4132
fix prometheus concurrent map write bug
上级
f0bf9936
bf69017e
隐藏空白字符变更
内嵌
并排
正在显示
3 个修改的文件
包含
76 行增加
和
9 行删除
+76
-9
daemon.go
cmd/ipfs/daemon.go
+2
-2
metrics.go
core/corehttp/metrics.go
+70
-3
package.json
package.json
+4
-4
没有找到文件。
cmd/ipfs/daemon.go
浏览文件 @
0d56a486
...
...
@@ -23,11 +23,11 @@ import (
fsrepo
"github.com/ipfs/go-ipfs/repo/fsrepo"
migrate
"github.com/ipfs/go-ipfs/repo/fsrepo/migrations"
mprome
"gx/ipfs/QmQXBfkuwgMaPx334WuL9NmyrKnbZ5udaWnHTHEsts2x3T/go-metrics-prometheus"
cmds
"gx/ipfs/QmSXUokcP4TJpFfqozT69AVAYRtzXVMUjzQVkYX41R9Svs/go-ipfs-cmds"
ma
"gx/ipfs/QmT4U94DnD8FRfqr21obWY32HLM5VExccPKMjQHofeYqr9/go-multiaddr"
"gx/ipfs/Qm
YYv3QFnfQbiwmi1tpkgKF8o4xFnZoBrvpupTiGJwL9nH
/client_golang/prometheus"
"gx/ipfs/Qm
TQuFQWHAWy4wMH6ZyPfGiawA5u9T8rs79FENoV8yXaoS
/client_golang/prometheus"
"gx/ipfs/Qmaabb1tJZ2CX5cp6MuuiGgns71NYoxdgQP6Xdid1dVceC/go-multiaddr-net"
mprome
"gx/ipfs/QmbqQP7GMwJCePfEvbMSZmyPifAz1kKZifo8vwVnVHt1wL/go-metrics-prometheus"
"gx/ipfs/Qmde5VP1qUkyQXKCfmEUA7bP64V2HAptbJ7phuPp7jXWwg/go-ipfs-cmdkit"
)
...
...
core/corehttp/metrics.go
浏览文件 @
0d56a486
...
...
@@ -6,13 +6,14 @@ import (
core
"github.com/ipfs/go-ipfs/core"
prometheus
"gx/ipfs/QmYYv3QFnfQbiwmi1tpkgKF8o4xFnZoBrvpupTiGJwL9nH/client_golang/prometheus"
prometheus
"gx/ipfs/QmTQuFQWHAWy4wMH6ZyPfGiawA5u9T8rs79FENoV8yXaoS/client_golang/prometheus"
promhttp
"gx/ipfs/QmTQuFQWHAWy4wMH6ZyPfGiawA5u9T8rs79FENoV8yXaoS/client_golang/prometheus/promhttp"
)
// This adds the scraping endpoint which Prometheus uses to fetch metrics.
func
MetricsScrapingOption
(
path
string
)
ServeOption
{
return
func
(
n
*
core
.
IpfsNode
,
_
net
.
Listener
,
mux
*
http
.
ServeMux
)
(
*
http
.
ServeMux
,
error
)
{
mux
.
Handle
(
path
,
prom
etheus
.
UninstrumentedHandler
(
))
mux
.
Handle
(
path
,
prom
http
.
HandlerFor
(
prometheus
.
DefaultGatherer
,
promhttp
.
HandlerOpts
{}
))
return
mux
,
nil
}
}
...
...
@@ -20,8 +21,74 @@ func MetricsScrapingOption(path string) ServeOption {
// This adds collection of net/http-related metrics
func
MetricsCollectionOption
(
handlerName
string
)
ServeOption
{
return
func
(
_
*
core
.
IpfsNode
,
_
net
.
Listener
,
mux
*
http
.
ServeMux
)
(
*
http
.
ServeMux
,
error
)
{
// Adapted from github.com/prometheus/client_golang/prometheus/http.go
// Work around https://github.com/prometheus/client_golang/pull/311
opts
:=
prometheus
.
SummaryOpts
{
Subsystem
:
"http"
,
ConstLabels
:
prometheus
.
Labels
{
"handler"
:
handlerName
},
Objectives
:
map
[
float64
]
float64
{
0.5
:
0.05
,
0.9
:
0.01
,
0.99
:
0.001
},
}
reqCnt
:=
prometheus
.
NewCounterVec
(
prometheus
.
CounterOpts
{
Namespace
:
opts
.
Namespace
,
Subsystem
:
opts
.
Subsystem
,
Name
:
"requests_total"
,
Help
:
"Total number of HTTP requests made."
,
ConstLabels
:
opts
.
ConstLabels
,
},
[]
string
{
"method"
,
"code"
},
)
if
err
:=
prometheus
.
Register
(
reqCnt
);
err
!=
nil
{
if
are
,
ok
:=
err
.
(
prometheus
.
AlreadyRegisteredError
);
ok
{
reqCnt
=
are
.
ExistingCollector
.
(
*
prometheus
.
CounterVec
)
}
else
{
return
nil
,
err
}
}
opts
.
Name
=
"request_duration_seconds"
opts
.
Help
=
"The HTTP request latencies in seconds."
reqDur
:=
prometheus
.
NewSummaryVec
(
opts
,
nil
)
if
err
:=
prometheus
.
Register
(
reqDur
);
err
!=
nil
{
if
are
,
ok
:=
err
.
(
prometheus
.
AlreadyRegisteredError
);
ok
{
reqDur
=
are
.
ExistingCollector
.
(
*
prometheus
.
SummaryVec
)
}
else
{
return
nil
,
err
}
}
opts
.
Name
=
"request_size_bytes"
opts
.
Help
=
"The HTTP request sizes in bytes."
reqSz
:=
prometheus
.
NewSummaryVec
(
opts
,
nil
)
if
err
:=
prometheus
.
Register
(
reqSz
);
err
!=
nil
{
if
are
,
ok
:=
err
.
(
prometheus
.
AlreadyRegisteredError
);
ok
{
reqSz
=
are
.
ExistingCollector
.
(
*
prometheus
.
SummaryVec
)
}
else
{
return
nil
,
err
}
}
opts
.
Name
=
"response_size_bytes"
opts
.
Help
=
"The HTTP response sizes in bytes."
resSz
:=
prometheus
.
NewSummaryVec
(
opts
,
nil
)
if
err
:=
prometheus
.
Register
(
resSz
);
err
!=
nil
{
if
are
,
ok
:=
err
.
(
prometheus
.
AlreadyRegisteredError
);
ok
{
resSz
=
are
.
ExistingCollector
.
(
*
prometheus
.
SummaryVec
)
}
else
{
return
nil
,
err
}
}
// Construct the mux
childMux
:=
http
.
NewServeMux
()
mux
.
HandleFunc
(
"/"
,
prometheus
.
InstrumentHandler
(
handlerName
,
childMux
))
var
promMux
http
.
Handler
=
childMux
promMux
=
promhttp
.
InstrumentHandlerResponseSize
(
resSz
,
promMux
)
promMux
=
promhttp
.
InstrumentHandlerRequestSize
(
reqSz
,
promMux
)
promMux
=
promhttp
.
InstrumentHandlerDuration
(
reqDur
,
promMux
)
promMux
=
promhttp
.
InstrumentHandlerCounter
(
reqCnt
,
promMux
)
mux
.
Handle
(
"/"
,
promMux
)
return
childMux
,
nil
}
}
...
...
package.json
浏览文件 @
0d56a486
...
...
@@ -42,9 +42,9 @@
"version"
:
"0.0.0"
},
{
"hash"
:
"Qm
YYv3QFnfQbiwmi1tpkgKF8o4xFnZoBrvpupTiGJwL9nH
"
,
"hash"
:
"Qm
TQuFQWHAWy4wMH6ZyPfGiawA5u9T8rs79FENoV8yXaoS
"
,
"name"
:
"client_golang"
,
"version"
:
"0.1.
3
"
"version"
:
"0.1.
4
"
},
{
"hash"
:
"QmV1DPm5F46LvQMxCVPhu35zHgZEeMvyVtpxjb5TwfGiua"
,
...
...
@@ -160,9 +160,9 @@
},
{
"author"
:
"ipfs"
,
"hash"
:
"Qm
bqQP7GMwJCePfEvbMSZmyPifAz1kKZifo8vwVnVHt1wL
"
,
"hash"
:
"Qm
QXBfkuwgMaPx334WuL9NmyrKnbZ5udaWnHTHEsts2x3T
"
,
"name"
:
"go-metrics-prometheus"
,
"version"
:
"0.3.
9
"
"version"
:
"0.3.
10
"
},
{
"author"
:
"ipfs"
,
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论