golang系统指标收集与展示并支持Graphite/InfluxDB转发的插件库ostent的使用
Golang系统指标收集与展示并支持Graphite/InfluxDB转发的插件库Ostent使用
Ostent是一个用于收集、显示和报告系统指标的服务器工具,支持将指标转发到InfluxDB、Graphite和Librato。
功能特性
系统收集和报告的指标包括:
- RAM、swap使用情况
- CPU使用率、平均负载
- 磁盘空间使用情况(字节和inode)
- 网络输入输出(字节、数据包、丢包和错误)
进程顶部信息仅用于显示。
安装
Ostent是一个单可执行文件。可以通过以下命令下载并解压:
curl -L https://github.com/ostrost/ostent/releases/download/v0.7.0/`uname`-`uname -m`.tar.xz | tar Jxf -
这会将可执行文件放在./usr/**/bin/ostent
目录下。如需系统级安装,可以使用sudo tar Jxf - -C / <<<...
。
支持平台:
- Linux
- FreeBSD
- Mac OS X
使用
$ ostent -h
Ostent是一个用于收集、显示和报告系统指标的服务器工具。
用法:
ostent [flags]
标志:
--bind string 服务器绑定地址 (默认 "")
--bind-port int 服务器绑定端口 (默认 8050)
--config string 配置文件名称 (默认 "$HOME/.ostent.toml")
--interval duration 指标收集间隔 (默认 10s)
--log-requests 记录服务器请求 (默认 false)
--upgrade-checks 定期检查更新 (默认 true)
--version 打印版本并退出
配置
配置文件支持所有[telegraf]设置。Ostent实现额外提供了[agent]
bind
和bind_port
选项。其他结构与[telegraf配置]相同。
要启用InfluxDB报告:
[outputs]
[outputs.influxdb]
database = "ostent"
urls = ["http://127.0.0.1:8086"]
其他输出部分可以是[outputs.graphite]
和[outputs.librato]
。
运行代码
go get github.com/ostrost/ostent
ostent
运行
重建
cd $(go list -f {{.Dir}} github.com/ostrost/ostent)
make init
(只需执行一次)npm install
(可选,设置资源和模板重建)- 修改后执行
gulp watch
或make
make
会重建以下提交到仓库的文件:
share/assets/bindata.*.go
share/assets/css/*.css
share/assets/js/*/*.js
share/templates/*.html
share/templates/bindata.*.go
share/js/*.jsx
两种构建方式
由make
(或go get -tags bin
)生成的独立和发布二进制文件包含嵌入的模板和资源。
由gulp watch
和go get
生成的非bin构建:
- 从实际文件提供资源和模板
- 有一组用于调试等的标志
更多关于golang系统指标收集与展示并支持Graphite/InfluxDB转发的插件库ostent的使用的实战教程也可以访问 https://www.itying.com/category-94-b0.html
更多关于golang系统指标收集与展示并支持Graphite/InfluxDB转发的插件库ostent的使用的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html
ostent - Golang系统指标收集与展示库
ostent是一个用Go语言编写的轻量级系统指标收集和展示工具,支持将指标转发到Graphite和InfluxDB等时间序列数据库。
主要特性
- 实时收集系统指标(CPU、内存、磁盘、网络等)
- 提供简洁的Web界面展示
- 支持指标转发到Graphite和InfluxDB
- 轻量级,易于部署
安装与使用
安装
go get github.com/rzab/ostent
基本使用
package main
import (
"log"
"github.com/rzab/ostent/ostent"
)
func main() {
// 创建ostent实例
o := ostent.NewOstent()
// 配置基本参数
o.Addr = ":8080" // Web界面监听端口
o.Interval = 5 // 收集间隔(秒)
// 启动服务
if err := o.Run(); err != nil {
log.Fatal(err)
}
}
配置转发到Graphite/InfluxDB
Graphite配置示例
package main
import (
"log"
"github.com/rzab/ostent/ostent"
"github.com/rzab/ostent/graphite"
)
func main() {
o := ostent.NewOstent()
o.Addr = ":8080"
o.Interval = 5
// 配置Graphite转发
graphiteConfig := &graphite.Config{
Host: "graphite.example.com",
Port: 2003,
Prefix: "ostent",
Interval: 60, // 转发间隔(秒)
}
// 添加Graphite转发器
o.AddFlusher(graphite.NewFlusher(graphiteConfig))
if err := o.Run(); err != nil {
log.Fatal(err)
}
}
InfluxDB配置示例
package main
import (
"log"
"github.com/rzab/ostent/ostent"
"github.com/rzab/ostent/influxdb"
)
func main() {
o := ostent.NewOstent()
o.Addr = ":8080"
o.Interval = 5
// 配置InfluxDB转发
influxConfig := &influxdb.Config{
Host: "influxdb.example.com",
Port: 8086,
Database: "metrics",
Username: "user",
Password: "pass",
Interval: 60, // 转发间隔(秒)
}
// 添加InfluxDB转发器
o.AddFlusher(influxdb.NewFlusher(influxConfig))
if err := o.Run(); err != nil {
log.Fatal(err)
}
}
自定义指标收集
ostent允许添加自定义指标收集器:
package main
import (
"log"
"time"
"github.com/rzab/ostent/ostent"
"github.com/rzab/ostent/params"
)
// 自定义指标收集器
type CustomCollector struct{}
func (c *CustomCollector) Collect() ([]params.Param, error) {
return []params.Param{
{
Name: "custom.metric",
Value: float64(time.Now().Unix()),
Unit: "timestamp",
},
}, nil
}
func main() {
o := ostent.NewOstent()
o.Addr = ":8080"
o.Interval = 5
// 添加自定义收集器
o.AddCollector(&CustomCollector{})
if err := o.Run(); err != nil {
log.Fatal(err)
}
}
命令行参数
ostent也支持通过命令行参数配置:
# 基本运行
ostent -addr :8080 -interval 5
# 启用Graphite转发
ostent -graphite-host graphite.example.com -graphite-port 2003 -graphite-prefix ostent
# 启用InfluxDB转发
ostent -influxdb-host influxdb.example.com -influxdb-port 8086 -influxdb-database metrics
注意事项
- ostent默认会收集系统基础指标,包括CPU、内存、磁盘、网络等
- Web界面访问地址为
http://localhost:8080
- 转发到Graphite/InfluxDB的间隔建议大于收集间隔,以减少网络开销
- 在生产环境中,建议通过systemd或supervisor管理ostent进程
ostent是一个轻量级的解决方案,适合需要快速搭建系统监控但不想部署复杂监控系统的场景。对于更复杂的需求,可能需要考虑Prometheus等更全面的监控方案。