Database

[VictoriaMetrics] Metric 수집(Direct Push)

흥부가귀막혀 2022. 3. 16. 17:02

InfluxDB Line Protocol

기본적으로 VictoriaMetrics 를 실행하면 8428 포트로 운영이 되고, 해당 포트에 InfluxDB Line Protocol 형식으로 data 요청이 가능하다.
만약 InfluxDB Line Protocol 을 받을 포트를 변경하고 싶다면, -influxListenAddr 옵션을 통해 변경할 수 있다.

/path/to/victoria-metrics-prod -influxListenAddr=:8428

VictoriaMetrics 는 InfluxDB Data 를 받으면 이를 Prometheus 데이터 포인트로 변환을 한다.
아래와 같은 InfluxDB Data 를 보낸다고 가정하면

foo,tag1=value1,tag2=value2 field1=12,field2=40

VictoriaMetrics 에는 아래의 형태로 변환이 된다.

foo_field1{tag1="value1", tag2="value2"} 12
foo_field2{tag1="value1", tag2="value2"} 40

HTTP Protocol 통신을 통해 InfluxDB Data 를 전송할 수 있다.
요청시 '\n'(개행 문자라고도 함)으로 구분된 임의의 수의 행을 보낼 수 있다.

curl -d 'measurement,tag1=value1,tag2=value2 field1=123,field2=1.23' -X POST 'http://localhost:8428/write'

데이터가 전송된 이후에, /api/v1/export을 통해 확인할 수도 있다.

curl -G 'http://localhost:8428/api/v1/export' -d 'match={__name__=~"measurement_.*"}'
{"metric":{"__name__":"measurement_field1","tag1":"value1","tag2":"value2"},"values":[123],"timestamps":[1560272508147]}
{"metric":{"__name__":"measurement_field2","tag1":"value1","tag2":"value2"},"values":[1.23],"timestamps":[1560272508147]}

InfluxDB 라인 프로토콜은 기본적으로 나노초 단위의 타임스탬프를 정의하지만, VictoriaMetrics는 밀리초 단위로 저장한다.
extra_label=name=value 쿼리 파라미터를 전달하여 작성된 모든 시계열에 레이블을 추가할 수 있다. 예를 들어 수집된 모든 측정항목에 {foo="bar"} 레이블을 추가하고자 한다면, /write?extra_label=foo=bar 로 요청한다.
Reference: How to send data from influxdb-compatible agents such as telegraf


Graphite

VictoriaMetrics 실행 시 graphite metric을 수집할 포트를 정의한다.

/path/to/victoria-metrics-prod -graphiteListenAddr=:2003

메트릭을 graphite 형식에 맞추어 전송한다. 여러 메트릭이 필요한 경우, \n으로 개행한다. timestamp가 없는 경우, 현재 시간이 자동으로 삽입된다.

echo "foo.bar.baz;tag1=value1;tag2=value2 123 `date +%s`" | nc -N localhost 2003

데이터가 전송된 이후에, /api/v1/export을 통해 확인할 수도 있다.

curl -G 'http://localhost:8428/api/v1/export' -d 'match=foo.bar.baz'
{"metric":{"__name__":"foo.bar.baz","tag1":"value1","tag2":"value2"},"values":[123],"timestamps":[1560277406000]}

Reference: How to send data from Graphite-compatible agents such as StatsD


OpenTSDB 호환 방식(OpenTSDB Agent 호환)

openTSDB metric을 수집할 HTTP포트를 열어준다.

/path/to/victoria-metrics-prod -opentsdbListenAddr=:4242

OpenTSDB 호환 에이전트에서 지정된 주소로 데이터를 보낸다.
\n(개행 문자라고도 함) 으로 구분된 임의의 수의 행을 한번에 보낼 수 있다.
아래는 nc command 를 사용하여 로컬 VictoriaMetrics에 OpenTSDB 프로토콜로 데이터를 쓰는 예.

echo "put foo.bar.baz `date +%s` 123 tag1=value1 tag2=value2" | nc -N localhost 4242

데이터가 전송된 이후에, /api/v1/export을 통해 확인할 수도 있다.

curl -G 'http://localhost:8428/api/v1/export' -d 'match=foo.bar.baz'
{"metric":{"__name__":"foo.bar.baz","tag1":"value1","tag2":"value2"},"values":[123],"timestamps":[1560277292000]}

Reference: How to send data from OpenTSDB-compatible agents


OpenTSDB 호환 방식(HTTP 통신)

openTSDB metric을 수집할 HTTP포트를 열어준다.

/path/to/victoria-metrics-prod -opentsdbHTTPListenAddr=:4242

다음 처럼 json 형대의 메트릭을 /api/put으로 전송한다.

curl -H 'Content-Type: application/json' -d '{"metric":"x.y.z","value":45.34,"tags":{"t1":"v1","t2":"v2"}}' http://localhost:4242/api/put

여러 메트릭을 보내는 형식은 다음과 같다.

curl -H 'Content-Type: application/json' -d '[{"metric":"foo","value":45.34},{"metric":"bar","value":43}]' http://localhost:4242/api/put

데이터가 전송된 이후에, /api/v1/export을 통해 확인할 수도 있다.

curl -G 'http://localhost:8428/api/v1/export' -d 'match[]=x.y.z' -d 'match[]=foo' -d 'match[]=bar'
{"metric":{"__name__":"foo"},"values":[45.34],"timestamps":[1566464846000]}
{"metric":{"__name__":"bar"},"values":[43],"timestamps":[1566464846000]}
{"metric":{"__name__":"x.y.z","t1":"v1","t2":"v2"},"values":[45.34],"timestamps":[1566464763000]}

Reference: Sending OpenTSDB data via HTTP /api/put requests