feat: バージョンを表示できるように

This commit is contained in:
usbharu 2025-04-20 18:11:31 +09:00
parent f34672c826
commit 2fe3084d80
Signed by: usbharu
GPG Key ID: 8CB1087135660B8D
3 changed files with 320 additions and 160 deletions

View File

@ -69,6 +69,18 @@ func collectPing() {
} }
} }
func collectMeta() {
for {
time.Sleep(1 * time.Minute)
meta, err := client.Meta().InstanceMeta(true)
if err != nil {
logrus.WithField("type", "meta").Warning(err)
continue
}
misskeyMeta.WithLabelValues(*meta.Version).Set(1)
}
}
func collectStats() { func collectStats() {
for { for {
time.Sleep(30 * time.Second) time.Sleep(30 * time.Second)

View File

@ -23,7 +23,6 @@
"panels": [ "panels": [
{ {
"datasource": { "datasource": {
"type": "prometheus",
"uid": "cej25be7w5af4e" "uid": "cej25be7w5af4e"
}, },
"fieldConfig": { "fieldConfig": {
@ -31,36 +30,23 @@
"color": { "color": {
"mode": "thresholds" "mode": "thresholds"
}, },
"fieldMinMax": false, "custom": {
"mappings": [ "align": "auto",
{ "cellOptions": {
"options": { "type": "auto"
"0": {
"index": 1,
"text": "DOWN"
}, },
"1": { "inspect": false
"index": 0,
"text": "UP"
}
}, },
"type": "value" "mappings": [],
}
],
"noValue": "UNKNOWN",
"thresholds": { "thresholds": {
"mode": "absolute", "mode": "absolute",
"steps": [ "steps": [
{ {
"color": "red" "color": "green"
}, },
{ {
"color": "red", "color": "red",
"value": 0 "value": 80
},
{
"color": "green",
"value": 1
} }
] ]
} }
@ -68,140 +54,60 @@
"overrides": [] "overrides": []
}, },
"gridPos": { "gridPos": {
"h": 6, "h": 3,
"w": 3, "w": 6,
"x": 0, "x": 0,
"y": 0 "y": 0
}, },
"id": 1, "id": 12,
"options": { "options": {
"colorMode": "value", "cellHeight": "sm",
"graphMode": "area", "footer": {
"justifyMode": "auto", "countRows": false,
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"last"
],
"fields": "", "fields": "",
"values": false "reducer": [
"sum"
],
"show": false
}, },
"showPercentChange": false, "showHeader": false
"textMode": "auto",
"wideLayout": true
}, },
"pluginVersion": "11.6.0", "pluginVersion": "11.6.0",
"targets": [ "targets": [
{ {
"datasource": {
"type": "prometheus",
"uid": "cej25be7w5af4e"
},
"disableTextWrap": false, "disableTextWrap": false,
"editorMode": "builder", "editorMode": "builder",
"expr": "misskey_health", "exemplar": false,
"expr": "misskey_meta{instance=\"$instance\", job=\"$job\"}",
"format": "table",
"fullMetaSearch": false, "fullMetaSearch": false,
"includeNullMetadata": true, "includeNullMetadata": true,
"instant": true,
"legendFormat": "__auto", "legendFormat": "__auto",
"range": true, "range": false,
"refId": "A", "refId": "A",
"useBackend": false "useBackend": false
} }
], ],
"title": "Health", "title": "Misskey Version",
"type": "stat" "transformations": [
},
{
"datasource": {
"type": "prometheus",
"uid": "cej25be7w5af4e"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"fieldMinMax": false,
"mappings": [
{ {
"id": "organize",
"options": { "options": {
"0": { "excludeByName": {
"index": 1, "Time": true,
"text": "DOWN" "Value": true,
"__name__": true,
"instance": true,
"job": true
}, },
"1": { "includeByName": {},
"index": 0, "indexByName": {},
"text": "UP" "renameByName": {}
} }
},
"type": "value"
} }
], ],
"noValue": "UNKNOWN", "type": "table"
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "red"
},
{
"color": "red",
"value": 0
},
{
"color": "green",
"value": 1
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 6,
"w": 3,
"x": 3,
"y": 0
},
"id": 7,
"options": {
"colorMode": "value",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"last"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "value",
"wideLayout": true
},
"pluginVersion": "11.6.0",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "cej25be7w5af4e"
},
"disableTextWrap": false,
"editorMode": "builder",
"expr": "up",
"fullMetaSearch": false,
"includeNullMetadata": true,
"legendFormat": "__auto",
"range": true,
"refId": "A",
"useBackend": false
}
],
"title": "Exporter Health",
"type": "stat"
}, },
{ {
"datasource": { "datasource": {
@ -261,14 +167,18 @@
"pluginVersion": "11.6.0", "pluginVersion": "11.6.0",
"targets": [ "targets": [
{ {
"disableTextWrap": false,
"editorMode": "code", "editorMode": "code",
"exemplar": false, "exemplar": false,
"expr": "100 * (sum_over_time(misskey_health[30d]) / count_over_time(misskey_health[30d]))", "expr": "100 * (sum_over_time(misskey_health{instance=\"$instance\", job=\"$job\"}[30d]) / count_over_time(misskey_health{instance=\"$instance\", job=\"$job\"}[30d]))",
"format": "time_series", "format": "time_series",
"fullMetaSearch": false,
"includeNullMetadata": true,
"instant": false, "instant": false,
"legendFormat": "__auto", "legendFormat": "__auto",
"range": true, "range": true,
"refId": "A" "refId": "A",
"useBackend": false
} }
], ],
"title": "Availability(30d)", "title": "Availability(30d)",
@ -311,7 +221,7 @@
"percentChangeColorMode": "standard", "percentChangeColorMode": "standard",
"reduceOptions": { "reduceOptions": {
"calcs": [ "calcs": [
"lastNotNull" "last"
], ],
"fields": "", "fields": "",
"values": false "values": false
@ -384,26 +294,34 @@
"pluginVersion": "11.6.0", "pluginVersion": "11.6.0",
"targets": [ "targets": [
{ {
"disableTextWrap": false,
"editorMode": "builder", "editorMode": "builder",
"expr": "misskey_notes_count", "expr": "misskey_notes_count{instance=\"$instance\", job=\"$job\"}",
"fullMetaSearch": false,
"includeNullMetadata": true,
"instant": false, "instant": false,
"legendFormat": "All", "legendFormat": "All",
"range": true, "range": true,
"refId": "A" "refId": "A",
"useBackend": false
}, },
{ {
"datasource": { "datasource": {
"type": "prometheus", "type": "prometheus",
"uid": "cej25be7w5af4e" "uid": "cej25be7w5af4e"
}, },
"disableTextWrap": false,
"editorMode": "builder", "editorMode": "builder",
"exemplar": false, "exemplar": false,
"expr": "misskey_original_notes_count", "expr": "misskey_original_notes_count{instance=\"$instance\", job=\"$job\"}",
"fullMetaSearch": false,
"hide": false, "hide": false,
"includeNullMetadata": true,
"instant": false, "instant": false,
"legendFormat": "Local", "legendFormat": "Local",
"range": true, "range": true,
"refId": "B" "refId": "B",
"useBackend": false
} }
], ],
"title": "Note Count", "title": "Note Count",
@ -459,29 +377,219 @@
"pluginVersion": "11.6.0", "pluginVersion": "11.6.0",
"targets": [ "targets": [
{ {
"editorMode": "code", "disableTextWrap": false,
"expr": "misskey_users_count", "editorMode": "builder",
"expr": "misskey_users_count{instance=\"$instance\", job=\"$job\"}",
"fullMetaSearch": false,
"includeNullMetadata": true,
"legendFormat": "All", "legendFormat": "All",
"range": true, "range": true,
"refId": "A" "refId": "A",
"useBackend": false
}, },
{ {
"datasource": { "datasource": {
"type": "prometheus", "type": "prometheus",
"uid": "cej25be7w5af4e" "uid": "cej25be7w5af4e"
}, },
"editorMode": "code", "disableTextWrap": false,
"expr": "misskey_original_users_count", "editorMode": "builder",
"expr": "misskey_original_users_count{instance=\"$instance\", job=\"$job\"}",
"fullMetaSearch": false,
"hide": false, "hide": false,
"includeNullMetadata": true,
"instant": false, "instant": false,
"legendFormat": "Local", "legendFormat": "Local",
"range": true, "range": true,
"refId": "B" "refId": "B",
"useBackend": false
} }
], ],
"title": "User Count", "title": "User Count",
"type": "stat" "type": "stat"
}, },
{
"datasource": {
"type": "prometheus",
"uid": "cej25be7w5af4e"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"fieldMinMax": false,
"mappings": [
{
"options": {
"0": {
"index": 1,
"text": "DOWN"
},
"1": {
"index": 0,
"text": "UP"
}
},
"type": "value"
}
],
"noValue": "UNKNOWN",
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "red"
},
{
"color": "red",
"value": 0
},
{
"color": "green",
"value": 1
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 3,
"w": 3,
"x": 0,
"y": 3
},
"id": 1,
"options": {
"colorMode": "value",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"last"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "auto",
"wideLayout": true
},
"pluginVersion": "11.6.0",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "cej25be7w5af4e"
},
"disableTextWrap": false,
"editorMode": "builder",
"expr": "misskey_health{instance=\"$instance\", job=\"$job\"}",
"fullMetaSearch": false,
"includeNullMetadata": true,
"legendFormat": "__auto",
"range": true,
"refId": "A",
"useBackend": false
}
],
"title": "Health",
"type": "stat"
},
{
"datasource": {
"type": "prometheus",
"uid": "cej25be7w5af4e"
},
"fieldConfig": {
"defaults": {
"color": {
"mode": "thresholds"
},
"fieldMinMax": false,
"mappings": [
{
"options": {
"0": {
"index": 1,
"text": "DOWN"
},
"1": {
"index": 0,
"text": "UP"
}
},
"type": "value"
}
],
"noValue": "UNKNOWN",
"thresholds": {
"mode": "absolute",
"steps": [
{
"color": "red"
},
{
"color": "red",
"value": 0
},
{
"color": "green",
"value": 1
}
]
}
},
"overrides": []
},
"gridPos": {
"h": 3,
"w": 3,
"x": 3,
"y": 3
},
"id": 7,
"options": {
"colorMode": "value",
"graphMode": "area",
"justifyMode": "auto",
"orientation": "auto",
"percentChangeColorMode": "standard",
"reduceOptions": {
"calcs": [
"last"
],
"fields": "",
"values": false
},
"showPercentChange": false,
"textMode": "value",
"wideLayout": true
},
"pluginVersion": "11.6.0",
"targets": [
{
"datasource": {
"type": "prometheus",
"uid": "cej25be7w5af4e"
},
"disableTextWrap": false,
"editorMode": "builder",
"expr": "up{instance=\"$instance\", job=\"$job\"}",
"fullMetaSearch": false,
"includeNullMetadata": true,
"legendFormat": "__auto",
"range": true,
"refId": "A",
"useBackend": false
}
],
"title": "Exporter Health",
"type": "stat"
},
{ {
"datasource": { "datasource": {
"type": "prometheus", "type": "prometheus",
@ -711,7 +819,7 @@
}, },
"disableTextWrap": false, "disableTextWrap": false,
"editorMode": "builder", "editorMode": "builder",
"expr": "misskey_api_response_time_raw", "expr": "misskey_api_response_time_raw{instance=\"$instance\", job=\"$job\"}",
"fullMetaSearch": false, "fullMetaSearch": false,
"hide": false, "hide": false,
"includeNullMetadata": false, "includeNullMetadata": false,
@ -780,7 +888,7 @@
{ {
"disableTextWrap": false, "disableTextWrap": false,
"editorMode": "builder", "editorMode": "builder",
"expr": "sum by(status) (misskey_jobqueue_jobs{type=\"deliver\"})", "expr": "sum by(status) (misskey_jobqueue_jobs{type=\"deliver\", instance=\"$instance\", job=\"$job\"})",
"fullMetaSearch": false, "fullMetaSearch": false,
"includeNullMetadata": true, "includeNullMetadata": true,
"legendFormat": "{{type}} {{status}}", "legendFormat": "{{type}} {{status}}",
@ -847,7 +955,7 @@
{ {
"disableTextWrap": false, "disableTextWrap": false,
"editorMode": "builder", "editorMode": "builder",
"expr": "sum by(status) (misskey_jobqueue_jobs{type=\"inbox\"})", "expr": "sum by(status) (misskey_jobqueue_jobs{type=\"inbox\", instance=\"$instance\", job=\"$job\"})",
"fullMetaSearch": false, "fullMetaSearch": false,
"includeNullMetadata": true, "includeNullMetadata": true,
"legendFormat": "{{type}} {{status}}", "legendFormat": "{{type}} {{status}}",
@ -934,9 +1042,7 @@
], ],
"displayMode": "table", "displayMode": "table",
"placement": "right", "placement": "right",
"showLegend": true, "showLegend": true
"sortBy": "Max",
"sortDesc": true
}, },
"tooltip": { "tooltip": {
"hideZeros": false, "hideZeros": false,
@ -949,7 +1055,7 @@
{ {
"disableTextWrap": false, "disableTextWrap": false,
"editorMode": "builder", "editorMode": "builder",
"expr": "misskey_jobqueue_jobs", "expr": "misskey_jobqueue_jobs{instance=\"$instance\", job=\"$job\"}",
"fullMetaSearch": false, "fullMetaSearch": false,
"includeNullMetadata": true, "includeNullMetadata": true,
"interval": "1", "interval": "1",
@ -964,19 +1070,53 @@
} }
], ],
"preload": false, "preload": false,
"refresh": "auto",
"schemaVersion": 41, "schemaVersion": 41,
"tags": [], "tags": [],
"templating": { "templating": {
"list": [] "list": [
{
"current": {
"text": "misskey-exporter:8080",
"value": "misskey-exporter:8080"
},
"definition": "label_values(instance)",
"name": "instance",
"options": [],
"query": {
"qryType": 1,
"query": "label_values(instance)",
"refId": "PrometheusVariableQueryEditor-VariableQuery"
},
"refresh": 1,
"regex": "",
"type": "query"
},
{
"current": {
"text": "process_exporter",
"value": "process_exporter"
},
"definition": "label_values(job)",
"name": "job",
"options": [],
"query": {
"qryType": 1,
"query": "label_values(job)",
"refId": "PrometheusVariableQueryEditor-VariableQuery"
},
"refresh": 1,
"regex": "",
"type": "query"
}
]
}, },
"time": { "time": {
"from": "now-15m", "from": "now-3h",
"to": "now" "to": "now"
}, },
"timepicker": {}, "timepicker": {},
"timezone": "browser", "timezone": "browser",
"title": "New dashboard", "title": "New dashboard",
"uid": "eej5avfu4yyo0f", "uid": "eej5avfu4yyo0f",
"version": 25 "version": 26
} }

View File

@ -154,6 +154,12 @@ var (
Name: "misskey_online_users", Name: "misskey_online_users",
Help: "Online Users", Help: "Online Users",
}) })
misskeyMeta = prometheus.NewGaugeVec(
prometheus.GaugeOpts{
Name: "misskey_meta",
Help: "Misskey Instance Metadata",
},
[]string{"version"})
) )
func main() { func main() {
@ -202,6 +208,7 @@ func main() {
prometheus.MustRegister(misskeyApiResponseTime) prometheus.MustRegister(misskeyApiResponseTime)
prometheus.MustRegister(misskeyApiResponseTimeRaw) prometheus.MustRegister(misskeyApiResponseTimeRaw)
prometheus.MustRegister(misskeyOnlineUsers) prometheus.MustRegister(misskeyOnlineUsers)
prometheus.MustRegister(misskeyMeta)
handler := promhttp.Handler() handler := promhttp.Handler()
@ -216,6 +223,7 @@ func main() {
go collectStats() go collectStats()
go collectTimeline() go collectTimeline()
go collectOnlineUsers() go collectOnlineUsers()
go collectMeta()
}() }()
logrus.Error(server.ListenAndServe()) logrus.Error(server.ListenAndServe())