mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2024-11-23 20:37:12 +01:00
lib/fs: add vm_filestream_read_duration_seconds_total
and vm_filestream_write_duration_seconds_total
metrics
These metrics help determining persistent disk saturation with `rate(vm_filestream_read_duration_seconds_total) > 0.9`
This commit is contained in:
parent
d052c8c81e
commit
2f63dec2e3
@ -8,7 +8,8 @@ sort: 15
|
|||||||
|
|
||||||
* FEATURE: add `now()` function to MetricsQL. This function returns the current timestamp in seconds. See [these docs](https://docs.victoriametrics.com/MetricsQL.html#now).
|
* FEATURE: add `now()` function to MetricsQL. This function returns the current timestamp in seconds. See [these docs](https://docs.victoriametrics.com/MetricsQL.html#now).
|
||||||
* FEATURE: vmauth: allow using optional `name` field in configs. This field is then used as `username` label value for `vmauth_user_requests_total` metric. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1805).
|
* FEATURE: vmauth: allow using optional `name` field in configs. This field is then used as `username` label value for `vmauth_user_requests_total` metric. See [this feature request](https://github.com/VictoriaMetrics/VictoriaMetrics/issues/1805).
|
||||||
* FEATURE: vmagent: export `vm_persistentqueue_read_duration_seconds_total` and `vm_persistentqueue_write_duration_seconds_total` metrics, which can be used for detecting persistent queue saturation with `rate(vm_persistentqueue_write_duration_seconds_total) > 0.9s` alerting rule.
|
* FEATURE: vmagent: export `vm_persistentqueue_read_duration_seconds_total` and `vm_persistentqueue_write_duration_seconds_total` metrics, which can be used for detecting persistent queue saturation with `rate(vm_persistentqueue_write_duration_seconds_total) > 0.9` alerting rule.
|
||||||
|
* FEATURE: export `vm_filestream_read_duration_seconds_total` and `vm_filestream_write_duration_seconds_total` metrics, which can be used for detecting persistent disk saturation with `rate(vm_filestream_read_duration_seconds_total) > 0.9` alerting rule.
|
||||||
* FEATURE: [vmbackup](https://docs.victoriametrics.com/vmbackup.html), [vmrestore](https://docs.victoriametrics.com/vmrestore.html): add `-s3ForcePathStyle` command-line flag, which can be used for making backups to [Aliyun OSS](https://www.aliyun.com/product/oss). See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/1802).
|
* FEATURE: [vmbackup](https://docs.victoriametrics.com/vmbackup.html), [vmrestore](https://docs.victoriametrics.com/vmrestore.html): add `-s3ForcePathStyle` command-line flag, which can be used for making backups to [Aliyun OSS](https://www.aliyun.com/product/oss). See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/1802).
|
||||||
* FEATURE: [vmctl](https://docs.victoriametrics.com/vmctl.html): improve data migration from OpenTSDB. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/1809). Thanks to @johnseekins .
|
* FEATURE: [vmctl](https://docs.victoriametrics.com/vmctl.html): improve data migration from OpenTSDB. See [this pull request](https://github.com/VictoriaMetrics/VictoriaMetrics/pull/1809). Thanks to @johnseekins .
|
||||||
* FEATURE: suppress `connection reset by peer` errors when remote client resets TCP connection to VictoriaMetrics / vmagent while ingesting the data via InfluxDB line protocol, Graphite protocol or OpenTSDB protocol. This error is expected, so there is no need in logging it.
|
* FEATURE: suppress `connection reset by peer` errors when remote client resets TCP connection to VictoriaMetrics / vmagent while ingesting the data via InfluxDB line protocol, Graphite protocol or OpenTSDB protocol. This error is expected, so there is no need in logging it.
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"sync"
|
"sync"
|
||||||
|
"time"
|
||||||
|
|
||||||
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/logger"
|
||||||
"github.com/VictoriaMetrics/VictoriaMetrics/lib/memory"
|
"github.com/VictoriaMetrics/VictoriaMetrics/lib/memory"
|
||||||
@ -108,6 +109,7 @@ func (r *Reader) MustClose() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
readDuration = metrics.NewFloatCounter(`vm_filestream_read_duration_seconds_total`)
|
||||||
readCallsBuffered = metrics.NewCounter(`vm_filestream_buffered_read_calls_total`)
|
readCallsBuffered = metrics.NewCounter(`vm_filestream_buffered_read_calls_total`)
|
||||||
readCallsReal = metrics.NewCounter(`vm_filestream_real_read_calls_total`)
|
readCallsReal = metrics.NewCounter(`vm_filestream_real_read_calls_total`)
|
||||||
readBytesBuffered = metrics.NewCounter(`vm_filestream_buffered_read_bytes_total`)
|
readBytesBuffered = metrics.NewCounter(`vm_filestream_buffered_read_bytes_total`)
|
||||||
@ -117,6 +119,11 @@ var (
|
|||||||
|
|
||||||
// Read reads file contents to p.
|
// Read reads file contents to p.
|
||||||
func (r *Reader) Read(p []byte) (int, error) {
|
func (r *Reader) Read(p []byte) (int, error) {
|
||||||
|
startTime := time.Now()
|
||||||
|
defer func() {
|
||||||
|
d := time.Since(startTime).Seconds()
|
||||||
|
readDuration.Add(d)
|
||||||
|
}()
|
||||||
readCallsBuffered.Inc()
|
readCallsBuffered.Inc()
|
||||||
n, err := r.br.Read(p)
|
n, err := r.br.Read(p)
|
||||||
readBytesBuffered.Add(n)
|
readBytesBuffered.Add(n)
|
||||||
@ -232,6 +239,7 @@ func (w *Writer) MustClose() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
writeDuration = metrics.NewFloatCounter(`vm_filestream_write_duration_seconds_total`)
|
||||||
writeCallsBuffered = metrics.NewCounter(`vm_filestream_buffered_write_calls_total`)
|
writeCallsBuffered = metrics.NewCounter(`vm_filestream_buffered_write_calls_total`)
|
||||||
writeCallsReal = metrics.NewCounter(`vm_filestream_real_write_calls_total`)
|
writeCallsReal = metrics.NewCounter(`vm_filestream_real_write_calls_total`)
|
||||||
writtenBytesBuffered = metrics.NewCounter(`vm_filestream_buffered_written_bytes_total`)
|
writtenBytesBuffered = metrics.NewCounter(`vm_filestream_buffered_written_bytes_total`)
|
||||||
@ -241,6 +249,11 @@ var (
|
|||||||
|
|
||||||
// Write writes p to the underlying file.
|
// Write writes p to the underlying file.
|
||||||
func (w *Writer) Write(p []byte) (int, error) {
|
func (w *Writer) Write(p []byte) (int, error) {
|
||||||
|
startTime := time.Now()
|
||||||
|
defer func() {
|
||||||
|
d := time.Since(startTime).Seconds()
|
||||||
|
writeDuration.Add(d)
|
||||||
|
}()
|
||||||
writeCallsBuffered.Inc()
|
writeCallsBuffered.Inc()
|
||||||
n, err := w.bw.Write(p)
|
n, err := w.bw.Write(p)
|
||||||
writtenBytesBuffered.Add(n)
|
writtenBytesBuffered.Add(n)
|
||||||
@ -257,6 +270,11 @@ func (w *Writer) Write(p []byte) (int, error) {
|
|||||||
//
|
//
|
||||||
// if isSync is true, then the flushed data is fsynced to the underlying storage.
|
// if isSync is true, then the flushed data is fsynced to the underlying storage.
|
||||||
func (w *Writer) MustFlush(isSync bool) {
|
func (w *Writer) MustFlush(isSync bool) {
|
||||||
|
startTime := time.Now()
|
||||||
|
defer func() {
|
||||||
|
d := time.Since(startTime).Seconds()
|
||||||
|
writeDuration.Add(d)
|
||||||
|
}()
|
||||||
if err := w.bw.Flush(); err != nil {
|
if err := w.bw.Flush(); err != nil {
|
||||||
logger.Panicf("FATAL: cannot flush buffered data to file %q: %s", w.f.Name(), err)
|
logger.Panicf("FATAL: cannot flush buffered data to file %q: %s", w.f.Name(), err)
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user