英文:
Golang: healthd and healthtop of the library "gocraft/health"
问题
我正在使用gocraft/health来检查我的服务的健康状况,并获取每个端点的指标。我正在使用JSON轮询接收器来获取指标。
sink := health.NewJsonPollingSink(time.Minute*5, time.Minute*5)
stream.AddSink(sink)
我想在这里使用healthtop和healthd,链接中有相关说明。
我按照他们的说法修复了环境变量:export HEALTHD_MONITORED_HOSTPORTS=:5001 HEALTHD_SERVER_HOSTPORT=:5002 healthd
。
在他们说完"Now you can run it"之后,我不知道该如何运行。他们没有给出任何命令。我真的不明白他们的意思。
我导航到src/github.com/gocraft/health/cmd/healthd。我找到了main.go,当我运行它时,控制台输出如下:
[openrtb@sd-69536 healthd]$ go run main.go
[2015-06-17T23:04:20.871743758Z]: job:general event:starting kvs:[health_host_port::5002 monitored_host_ports::5001,:5002 server_host_port::5002]
[2015-06-17T23:04:20.87810814Z]: job:poll status:success time:4 ms kvs:[host_port::5002]
[2015-06-17T23:04:20.881896459Z]: job:poll status:success time:8 ms kvs:[host_port::5001]
[2015-06-17T23:04:20.882338024Z]: job:recalculate status:success time:231 μs
[2015-06-17T23:04:23.275370787Z]: job:recalculate status:success time:6 μs
[2015-06-17T23:04:30.875230839Z]: job:poll status:success time:1573 μs kvs:[host_port::5002]
[2015-06-17T23:04:30.881415193Z]: job:poll status:success time:7 ms kvs:[host_port::5001]
...
但是在这些端点上没有结果:
localhost:5002/jobs: 列出前几个作业
localhost:5002/hosts: 列出所有监控的主机及其状态
它给了我**{"error": "not_found"}**。
除了localhost:5002/health之外,我得到了以下JSON响应:
{
"instance_id": "sd-69536.1291",
"interval_duration": 3600000000000,
"aggregations": [
{
"interval_start": "2015-06-18T01:00:00+02:00",
"serial_number": 48,
"jobs": {
"general": {
"timers": {},
"events": {
"starting": 1
},
"event_errs": {},
"count": 0,
"nanos_sum": 0,
"nanos_sum_squares": 0,
"nanos_min": 0,
"nanos_max": 0,
"count_success": 0,
"count_validation_error": 0,
"count_panic": 0,
"count_error": 0,
"count_junk": 0
},
"poll": {
"timers": {},
"events": {},
"event_errs": {},
"count": 24,
"nanos_sum": 107049159,
"nanos_sum_squares": 6.06770682813009e+14,
"nanos_min": 1581783,
"nanos_max": 8259442,
"count_success": 24,
"count_validation_error": 0,
"count_panic": 0,
"count_error": 0,
"count_junk": 0
},
"recalculate": {
"timers": {},
"events": {},
"event_errs": {},
"count": 23,
"nanos_sum": 3501601,
"nanos_sum_squares": 6.75958305123e+11,
"nanos_min": 70639,
"nanos_max": 290877,
"count_success": 23,
"count_validation_error": 0,
"count_panic": 0,
"count_error": 0,
"count_junk": 0
}
},
"timers": {},
"events": {
"starting": 1
},
"event_errs": {}
}
]
}
但是我不知道这个结果的含义,因为它与我的localhost:5001/health端点没有任何关系,而根据他们的说法,它们应该是聚合的。
英文:
Im using gocraft/health to check the health of my service and have the metrics of each endPoint.
Im usin The JSON polling sink to get the metrics.
sink := health.NewJsonPollingSink(time.Minute*5, time.Minute*5)
stream.AddSink(sink)
I want to use healthtop and healthd here Link they explain how.
I fixed the environment variables: export HEALTHD_MONITORED_HOSTPORTS=:5001 HEALTHD_SERVER_HOSTPORT=:5002 healthd
as they said
after they said "Now you can run it". how, they didn't give any command to do it.I didn't realy understand what they mean.
I navigated to src/github.com/gocraft/health/cmd/healthd. I found main.go when I run it I got that in the console
[openrtb@sd-69536 healthd]$ go run main.go
[2015-06-17T23:04:20.871743758Z]: job:general event:starting kvs:[health_host_port::5002 monitored_host_ports::5001,:5002 server_host_port::5002]
[2015-06-17T23:04:20.87810814Z]: job:poll status:success time:4 ms kvs:[host_port::5002]
[2015-06-17T23:04:20.881896459Z]: job:poll status:success time:8 ms kvs:[host_port::5001]
[2015-06-17T23:04:20.882338024Z]: job:recalculate status:success time:231 μs
[2015-06-17T23:04:23.275370787Z]: job:recalculate status:success time:6 μs
[2015-06-17T23:04:30.875230839Z]: job:poll status:success time:1573 μs kvs:[host_port::5002]
[2015-06-17T23:04:30.881415193Z]: job:poll status:success time:7 ms kvs:[host_port::5001]
.
.
but no reslute on the those endpoints
localhost:5002/jobs: Lists top jobs
localhost:5002/hosts: Lists all monitored hosts and their statuses
it gave me {"error": "not_found"}
excepte this localhost:5002/health I got this JSON responce
{
"instance_id": "sd-69536.1291",
"interval_duration": 3600000000000,
"aggregations": [
{
"interval_start": "2015-06-18T01:00:00+02:00",
"serial_number": 48,
"jobs": {
"general": {
"timers": {},
"events": {
"starting": 1
},
"event_errs": {},
"count": 0,
"nanos_sum": 0,
"nanos_sum_squares": 0,
"nanos_min": 0,
"nanos_max": 0,
"count_success": 0,
"count_validation_error": 0,
"count_panic": 0,
"count_error": 0,
"count_junk": 0
},
"poll": {
"timers": {},
"events": {},
"event_errs": {},
"count": 24,
"nanos_sum": 107049159,
"nanos_sum_squares": 6.06770682813009e+14,
"nanos_min": 1581783,
"nanos_max": 8259442,
"count_success": 24,
"count_validation_error": 0,
"count_panic": 0,
"count_error": 0,
"count_junk": 0
},
"recalculate": {
"timers": {},
"events": {},
"event_errs": {},
"count": 23,
"nanos_sum": 3501601,
"nanos_sum_squares": 6.75958305123e+11,
"nanos_min": 70639,
"nanos_max": 290877,
"count_success": 23,
"count_validation_error": 0,
"count_panic": 0,
"count_error": 0,
"count_junk": 0
}
},
"timers": {},
"events": {
"starting": 1
},
"event_errs": {}
}
]
}
but no idea what this result mean, because it doesn't have any relation with my
localhost:5001/health EndPoint that should normaly aggregate as they said.
答案1
得分: 1
你下载的是一个二进制文件,所以如果你在正确的目录下,可以直接使用healthd
来调用它,他们实际上提供了这个例子:
HEALTHD_MONITORED_HOSTPORTS=:5020 HEALTHD_SERVER_HOSTPORT=:5032 healthd
这并不是设置环境变量,而是使用这两个值来调用healthd
(需要使用export或其他方法来使更改持久化,超出一个命令的范围)。healthtop
更清楚地说明了它是什么,但从它们的路径可以看出,它们都是gocraft/health/cmd/healthtop
命令。他们有几个在bash中使用healthtop
的例子,对于healthd
没有那么明确,但它们是相同的。
如果你运行了你在问题中展示的那个命令,那么你可以尝试运行healthtop jobs
或类似的命令。我对这个项目了解不多,也不想去研究它,但据我所知,healthd
只是一个服务,它从各种/health
端点收集结果,并在一个API中提供这些结果。看起来他们希望你使用healthtop
来查看报告。
还要注意这一点:
> 太棒了!为了了解healthd提供的数据类型,你可以手动导航到:
>/jobs:列出顶级作业
>/aggregations:提供聚合的时间序列
>/aggregations/overall:将所有时间序列聚合成一个聚合。
>/hosts:列出所有受监视的主机及其状态。
>但是,查看原始JSON只是为了让你了解数据。请参阅下一节...
我不确定域名是什么(如果你在本地运行,可能是localhost:5032),但你应该可以直接访问localhost:5032/jobs,看到healthd
正在运行并且在做一些事情。还要检查你的应用程序,确认它是否正在运行。不要期望直接从它那里获得任何输出,这就是healthtop
的作用。
英文:
What you downloaded is a binary so you can just invoke it with healthd
if you're in the correct directory, they actually provide this example;
HEALTHD_MONITORED_HOSTPORTS=:5020 HEALTHD_SERVER_HOSTPORT=:5032 healthd
Which isn't setting env var as much as invoking healthd with those two values (export or something would be required to persist the change beyond the one command). healthtop more clearly states what it is but as you can see by their paths, they're both commands gocraft/health/cmd/healthtop
. They have several examples of using healthtop from bash, not so explicit about healthd but it's the same.
If you ran that command (as you show in your question) then you may want to try healthtop jobs
or something to that effect. I don't know a ton about this project and don't care to research it but from what I can tell healthd
is just a service that collects results from various /health
endpoints and makes them available in on API. It seems like they intend for you to use healthtop
to on top of it to view reports.
Also note this;
> Great! To get a sense of the type of data healthd serves, you can manually navigate to:
>/jobs: Lists top jobs
>/aggregations: Provides a time series of aggregations
>/aggregations/overall: Squishes all time series aggregations into one aggregation.
>/hosts: Lists all monitored hosts and their statuses.
>However, viewing raw JSON is just to give you a sense of the data. See the next section...
I'm not sure what the domain is (localhost:5032 if you're running locally?) but you should probably just be able to go to localhost:5032/jobs and see the healthd
is running and doing something. Also check your apps to confirm it's up and running. Don't expect any output from it directly, that's what healthtop
is for.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论