Grafana§
在此,我们从 源代码 安装 Grafana,以便我们 对其进行配置 以在 Unit 上运行。
使用 Go 语言模块安装 Unit。
此外,确保 Unit 的 Go 模块在 $GOPATH 中可用。
下载 Grafana 的源文件
$ go get github.com/grafana/grafana
更新代码,将 Unit 添加到 Grafana 的协议列表。你可以应用补丁 (
grafana.patch
)$ cd $GOPATH/src/github.com/grafana/grafana $ curl -O https://unit.nginx.ac.cn/_downloads/grafana.patch $ patch -p1 < grafana.patch
或手动更新源代码。在 conf/defaults.ini 中
#################################### Server ############################## [server] # Protocol (http, https, socket, unit) protocol = unit
在 pkg/api/http_server.go 中
import ( // ... "net/http" "unit.nginx.org/go" "os" // ... ) // ... switch setting.Protocol { // ... case setting.HTTP, setting.HTTPS, setting.HTTP2: var err error listener, err = net.Listen("tcp", hs.httpSrv.Addr) if err != nil { return errutil.Wrapf(err, "failed to open listener on address %s", hs.httpSrv.Addr) } case setting.SOCKET: var err error listener, err = net.ListenUnix("unix", &net.UnixAddr{Name: setting.SocketPath, Net: "unix"}) if err != nil { return errutil.Wrapf(err, "failed to open listener for socket %s", setting.SocketPath) } case setting.UNIT: var err error err = unit.ListenAndServe(hs.httpSrv.Addr, hs.macaron) if err == http.ErrServerClosed { hs.log.Debug("server was shutdown gracefully") return nil }
在 pkg/setting/setting.go 中
const ( HTTP Scheme = "http" HTTPS Scheme = "https" SOCKET Scheme = "socket" UNIT Scheme = "unit" DEFAULT_HTTP_ADDR string = "0.0.0.0" ) // ... Protocol = HTTP protocolStr, err := valueAsString(server, "protocol", "http") // ... if protocolStr == "https" { Protocol = HTTPS CertFile = server.Key("cert_file").String() KeyFile = server.Key("cert_key").String() } if protocolStr == "h2" { Protocol = HTTP2 CertFile = server.Key("cert_file").String() KeyFile = server.Key("cert_key").String() } if protocolStr == "socket" { Protocol = SOCKET SocketPath = server.Key("socket").String() } if protocolStr == "unit" { Protocol = UNIT }
构建 Grafana
$ cd $GOPATH/src/github.com/grafana/grafana $ go get ./... $ go run build.go setup $ go run build.go build $ yarn install --pure-lockfile $ yarn start
记下新构建的 grafana-server 所在的目录,通常为 $GOPATH/bin/;它用于 Unit 配置中的 executable 选项。
运行以下命令,以便 Unit 可以访问 Grafana 的文件
# chown -R unit:unit $GOPATH/src/github.com/grafana/grafana # chown unit:unit $GOPATH/bin/grafana-server
有关更多详细信息,包括权限,请参阅 安全检查表。
接下来,准备 配置(将 $GOPATH 替换为其在 executable 和 working_directory 中的值)
{ "listeners": { "*:3000": { "pass": "applications/grafana" } }, "applications": { "grafana": { "executable": "$GOPATH/bin/grafana-server", "type": "external", "working_directory": "$GOPATH/src/github.com/grafana/grafana/" } } }
上传更新后的配置。假设上述 JSON 已添加到
config.json
# curl -X PUT --data-binary @config.json --unix-socket \ /path/to/control.unit.sock http://localhost/config/
成功更新后,Grafana 应可在侦听器的 IP 和端口上使用