- 在VisualStudio中部署GDAL库的C++版本(包括SQLite、PROJ等依赖)
- Android开机流程介绍
- STM32CubeMX教程31USB_DEVICE-HID外设_模拟键盘或鼠标
- 深入浅出Java多线程(五):线程间通信
grafana官网:https://grafana.com/zh-cn/grafana/ 。
grafana下载:https://grafana.com/grafana/download?pg=graf&plcmt=deploy-box-1 。
promtheus官网:https://prometheus.io/docs/introduction/overview/ 。
promtheus和采集服务下载:https://prometheus.io/download/ 。
loki github地址:https://github.com/grafana/loki/ 。
loki配置文件下载:https://raw.githubusercontent.com/grafana/loki/v1.5.0/cmd/loki/loki-local-config.yaml 。
loki push API:https://grafana.com/docs/loki/latest/reference/api/#push-log-entries-to-loki 。
本文介绍使用grafana+prometheus+loki实现数据和日志的方法,其中数据和日志的采集使用自定义采集的方式,使用既有协议,发送到数据库源存储 。
架构图如下:
根据对应的系统下载对应包,以二进制为例 。
./bin/grafana server #启动grafana
默认配置文件是 /conf/default.ini,其中 http_port 一项是服务的http访问端口 。
启动后,打开浏览器访问:http://127.0.0.1:3000 。
默认用户名和密码都是:admin,登录后会提示改密码 。
prometheus 是一种时序数据库,用于存放数据,也可以作为 grafana 的数据源提供数据 。
下面程序以随机数示例 。
package collector
import (
"github.com/prometheus/client_golang/prometheus"
"math/rand"
)
type Test struct {
queryCountDesc *prometheus.Desc
}
func (e *Test) Init(config *ExporterConfig) {
e.queryCountDesc = prometheus.NewDesc(
prometheus.BuildFQName(NAMESPACE, "", config.ExporterName), // 自定义指标名称
config.HelpInfo, // 指标的help信息
[]string{"sensor_type"}, //这里要和下面的metric一一对应上
prometheus.Labels{},
)
}
func (e *Test) Describe(ch chan<- *prometheus.Desc) {
ch <- e.queryCountDesc
}
func (e *Test) Collect(ch chan<- prometheus.Metric) {
queryCount := e.CalcFrequency()
ch <- prometheus.MustNewConstMetric(
e.queryCountDesc,
prometheus.CounterValue,
float64(queryCount),
"sensor_name", //这里是传感器名称,要和上面desc一一对应上
)
}
func (e *Test) CalcFrequency() float64 {
return rand.Float64() //随机数
}
main入口 。
func main() {
// 实例化并注册数据采集器exporter
reg := prometheus.NewPedanticRegistry()
for _, sensorConfig := range yamlConfig.ROSConfig.SensorConfig {
if sensorConfig.Enable {
getCollector := collector.GetCollector(&collector.ExporterConfig{
Node: node,
HelpInfo: sensorConfig.Help,
TopicName: sensorConfig.Topic,
ExporterName: sensorConfig.Name,
})
reg.MustRegister(getCollector)
log.Info("register topic: %s", sensorConfig.Topic)
}
}
// 定义一个采集数据的采集器集合,它可以合并多个不同的采集器数据到一个结果集合中
gatherers := prometheus.Gatherers{
reg, //自定义的采集器
}
// 启动http服务
h := promhttp.HandlerFor(gatherers,
// HandlerFor函数传递上边的gatherers对象,并返回一个httpHandler对象h。
// 这个httpHandler对象h可以调用其自身的ServHTTP函数来接收HTTP请求,并返回响应
promhttp.HandlerOpts{
ErrorHandling: promhttp.ContinueOnError, // 采集过程中如果出现错误,继续采集其他数据,不会中断采集器的工作
})
// 创建一个HTTP处理器来暴露指标
http.HandleFunc("/metrics", func(w http.ResponseWriter, r *http.Request) {
log.Debug("start...")
h.ServeHTTP(w, r)
})
// 启动Web服务器,对外接口9101,交由prometheus来访问获取数据
err = http.ListenAndServe(fmt.Sprintf(":%d", 9101), nil)
if err != nil {
log.Error("listen and server fail, error: %s", err.Error())
return
}
}
官方提供了很多常见的数据采集服务,可以根据需要自用,比如:node_exporter服务主要采集服务器的系统参数。本次以自定义数据采集示例 。
prometheus 下载解压后,进入目录,如下:
.
├── console_libraries
├── consoles
├── data
├── LICENSE
├── NOTICE
├── prometheus
├── prometheus.yml
└── promtool
prometheus 是需要执行的二进制,prometheus.yaml 是配置文件,修改配置 。
scrape_configs:
- job_name: "node"
static_configs:
- targets: ["localhost:9101"]
其他配置不管,这里配置采集程序 。
job_name 是采集程序名称 。
static_configs 配置采集程序的http地址,可以是多个,这里配置端口是9101,就是上面自定义采集程序开放的9101端口 。
./prometheus --config.file="prometheus.yml" #使用指定配置文件启动prometheus
peometheus 默认使用9090端口提供数据,也可以访问查看配置情况, 。
打开浏览器,访问:http://127.0.0.1:9090/ 。
以此点击:Status -> Target,可以看到配置的采集服务,如下图:
这里是采集服务没有运行,如果运行,则可以点击EndPoint进入查看数据 。
loki下载解压,看一下loki的配置文件,部分配置说明如下:
server:
http_listen_port: 3100 #loki接收的http端口
运行loki 。
./loki-linux-amd64 -config.file=loki-local-config.yaml
运行后查询采集内容,打开浏览器,访问:http://127.0.0.1:3100/metrics,即可看到原始数据上报 。
loki开放http接口接收日志,从文档中找到push api即可使用 。
POST /loki/api/v1/push
header中添加 。
Content-Type: application/json
body内容 。
{
"streams": [
{
"stream": {
"label": "value"
},
"values": [
[ "<unix epoch in nanoseconds>", "<log line>" ],
[ "<unix epoch in nanoseconds>", "<log line>" ]
]
}
]
}
测试 。
$ curl -v -H "Content-Type: application/json" -XPOST -s "http://localhost:3100/loki/api/v1/push" --data-raw \
'{"streams": [{ "stream": { "foo": "bar2" }, "values": [ [ "1570818238000000000", "fizzbuzz" ] ] }]}'
登录grafana,打开左上角菜单栏 -> Connections -> Data sources -> Add new data source,添加数据源,这里要添加两个 。
选择 prometheus,输入URL:http://localhost:9090(根据实际url修改),点击最下方的Save& test,保存并测试 。
选择 loki,输入URL:http://localhost:3100(根据实际url修改),点击最下方的Save& test,保存并测试 。
打开左上角菜单栏 -> Dabshboards -> New,创建新面板,自己摸索配置即可 。
最后此篇关于grafana+prometheus+loki的使用的文章就讲到这里了,如果你想了解更多关于grafana+prometheus+loki的使用的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我是普罗米修斯的新手。根据我到目前为止所阅读和尝试的内容,Prometheus 客户端库通过 HTTP 公开收集的指标,Prometheus 定期读取(抓取)。 在 Prometheus 抓取指标之前
我们正在寻求实现监控和警报解决方案,我们希望为每个功能单元提供自己的 prometheus 实例。 目前我们通过 prometheus-operator 使用单个 prometheus 实例运行它,但
在 Prometheus 中,有标签柯里化(Currying)。一些示例方法类似于 CurryWith()。 这是什么意思?抱歉,我没有找到这方面的任何文档。 问题可能与英语不是我的母语有关,我从函数
如何编写一个查询来输出过去 24 小时内实例的平均内存使用情况? 以下查询显示当前内存使用情况 100 * (1 - ((node_memory_MemFree + node_memory_Cache
我正在向 prometheus 发送与两个磁盘相关的数据。我想提醒一个磁盘的指标是否停止发送指标。假设我有 diskA 和 diskB,我正在收集 disk_up 指标。现在diskB失败了。在普罗米
我正在考虑将一些指标导出到 Prometheus,但我对我计划做的事情感到紧张。 我的系统由一个工作流引擎组成,我想跟踪工作流中每个步骤的一些指标。这似乎是合理的,有一个名为 wfengine_ste
我想根据 prometheus 值文件中的环境 qa/prod 设置环境特定的值 ## Additional alertmanager container environment variable
我有一个包含路径和状态代码的请求直方图...如果过去一小时内的错误比前一小时增加了 20%,我如何发出警报? 一个指标示例: {instance="someIp",instance_hostname=
我有一个包含路径和状态代码的请求直方图...如果过去一小时内的错误比前一小时增加了 20%,我如何发出警报? 一个指标示例: {instance="someIp",instance_hostname=
像这样的 Prometheus 规则文件: groups: - name: ./example.rules rules: - alert: ExampleAlert expr: vec
我们有多个在数据中心运行的 Prometheus 实例(我将它们称为 DC Prometheus 实例),以及一个额外的 Prometheus 实例(在下面的文本中我们将其称为“主”),我们在其中从
最近 prometheus-operator图表已弃用,图表已重命名 kube-prometheus-stack更清楚地反射(reflect)它安装了 kube-prometheus 项目堆栈,其中
我在 Amazon linux 2 实例上安装了 prometheus,这是我在用户数据中使用的配置: cat /etc/systemd/system/prometheus.service [Uni
我们正在使用 prometheus 运算符,我们现在想将数据存储在磁盘上,有一个博客对此进行了解释,但不确定来自查询的数字/大小响应 https://www.robustperception.io/h
目标 通过 grafana 和 prometheus 跟踪 RPM 和正常运行时间 情况 我们正在使用 django-prometheus -> To emit metrics fluent-bit
我有 Prometheus 从几台机器上的节点导出器中抓取指标,配置如下: scrape_configs: - job_name: node_exporter static_configs
我的 Prometheus 设置中有一个警报,它会在 someMetric > 100 时发送警报已对 5m 有效然后每隔 24h 重新发送警报根据下面的配置: prometheus-alert.ym
我有两个计数器。一个是测量累加器,另一个是测量计数。如何生成范围向量平均值? 我尝试了以下但得到的结果为空。 rate(my_events{type="sum"}[60s]) / rate(my_ev
因为 Prometheus 仅支持文本指标和许多 json 中的工具返回指标(如 Finatra、Spring Boot),所以我创建了一个简单的代理,将 json 转换为文本。因为我想将它用于多个源
Prometheus 是否可以计算指标具有特定值的持续时间(例如以秒为单位)? 一个简单的例子是 up可以有两个值的度量:1或 0指示系统是否正在运行。想象一下,自上周以来,系统多次上下波动。 我希望
我是一名优秀的程序员,十分优秀!