From c2afa3fdd73e3a35f3027a9e910c6341e7fb5420 Mon Sep 17 00:00:00 2001 From: Nikolay Date: Wed, 18 Nov 2020 03:00:06 +0300 Subject: [PATCH] adds snap package for victoria-metrics (#904) * adds snap package for victoria-metrics * Update README.md Co-authored-by: Aliaksandr Valialkin --- README.md | 1 + app/victoria-metrics/Makefile | 7 +++ snap/local/README.md | 57 ++++++++++++++++++++ snap/local/victoriametrics-wrapper | 7 +++ snap/snapcraft.yaml | 83 ++++++++++++++++++++++++++++++ 5 files changed, 155 insertions(+) create mode 100644 snap/local/README.md create mode 100755 snap/local/victoriametrics-wrapper create mode 100644 snap/snapcraft.yaml diff --git a/README.md b/README.md index df5a49b2e..aa9eacfd4 100644 --- a/README.md +++ b/README.md @@ -1363,6 +1363,7 @@ The collected profiles may be analyzed with [go tool pprof](https://github.com/g See [this example](https://github.com/go-graphite/carbonapi/blob/master/cmd/carbonapi/carbonapi.example.prometheus.yaml). * [Ansible role for installing single-node VictoriaMetrics](https://github.com/dreamteam-gg/ansible-victoriametrics-role). * [Ansible role for installing cluster VictoriaMetrics](https://github.com/Slapper/ansible-victoriametrics-cluster-role). +* [Snap package for VictoriaMetrics](https://snapcraft.io/victoriametrics). ## Third-party contributions diff --git a/app/victoria-metrics/Makefile b/app/victoria-metrics/Makefile index f6674db4d..c7665b180 100644 --- a/app/victoria-metrics/Makefile +++ b/app/victoria-metrics/Makefile @@ -108,3 +108,10 @@ victoria-metrics-package-deb-rpm-all: \ victoria-metrics-package-deb-arm64 \ victoria-metrics-package-rpm \ victoria-metrics-package-rpm-arm64 + +### Packaging as snap +victoria-metrics-package-snap: victoria-metrics-prod + which snapcraft || snap install snapcraft + which multipass || snap install multipass + snapcraft + diff --git a/snap/local/README.md b/snap/local/README.md new file mode 100644 index 000000000..c7a1feed3 --- /dev/null +++ b/snap/local/README.md @@ -0,0 +1,57 @@ +### Snap integration + +https://snapcraft.io/ + +snap link: https://snapcraft.io/victoriametrics + + +#### develop + +Install snapcraft and multipass: + ```text +snap install snapcraft +snap install multipass +``` + +build victoria-metrics prod binary and run snapcraft ```snapcraft --debug```. +It produces snap package with current git version - `victoriametrics_v1.46.0+git1.1bebd021a-dirty_all.snap`. +You can install it with command: `snap install victoriametrics_v1.46.0+git1.1bebd021a-dirty_all.snap --dangerous` + +package and publish: + +```text +make victoria-metrics-package-snap +snap login +snap_file=$(ls | grep -e '_multi.snap$') +snapcraft upload --release=latest/edge "$snap_file" +rm "$snap_file" +``` + +#### usage + +installation and configuration: + +```text +# install +snap install victoriametrics +# logs +snap logs victoriametrics +# restart + snap restart victoriametrics +``` + +Configuration management: + + Prometheus scrape config can be edited with your favorite editor, its located at +```text +vi /var/snap/victoriametrics/current/etc/victoriametrics-scrape-config.yaml +``` +after changes, you can trigger config reread with `curl localhost:8248/-/reload`. + +Configuration tuning is possible with editing extra_flags: +```text +echo 'FLAGS="-selfScrapeInterval=10s -search.logSlowQueryDuration=20s"' > /var/snap/victoriametrics/current/extra_flags +snap restart victoriametrics +``` + +Data folder located at `/var/snap/victoriametrics/current/var/lib/victoriametrics/` \ No newline at end of file diff --git a/snap/local/victoriametrics-wrapper b/snap/local/victoriametrics-wrapper new file mode 100755 index 000000000..afb3a4994 --- /dev/null +++ b/snap/local/victoriametrics-wrapper @@ -0,0 +1,7 @@ +#!/bin/bash + +test -e $SNAP_DATA/extra_flags || echo 'FLAGS=""' > $SNAP_DATA/extra_flags + +# get args +. $SNAP_DATA/extra_flags +$SNAP/bin/victoria-metrics -storageDataPath /var/lib/victoriametrics --promscrape.config /etc/victoriametrics-scrape-config.yaml $FLAGS \ No newline at end of file diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml new file mode 100644 index 000000000..5d4174d30 --- /dev/null +++ b/snap/snapcraft.yaml @@ -0,0 +1,83 @@ +name: victoriametrics +base: core18 +version: git +icon: logo.png +summary: VictoriaMetrics is fast, cost-effective and scalable time-series database. +description: | + * VictoriaMetrics can be used as long-term storage for Prometheus or for vmagent. + See [these docs](#prometheus-setup) for details. + * Supports Prometheus querying API, so it can be used as Prometheus drop-in replacement in Grafana. + VictoriaMetrics implements MetricsQL, https://github.com/VictoriaMetrics/VictoriaMetrics/wiki/MetricsQL query language, which is inspired by PromQL. + * Supports global query view. Multiple Prometheus instances may write data into VictoriaMetrics. Later this data may be used in a single query. + * High performance and good scalability for both inserts and selects. + * High data compression, so up to 70x more data points may be crammed into limited storage comparing to TimescaleDB. + * Optimized for storage with high-latency IO and low IOPS (HDD and network storage in AWS, Google Cloud, Microsoft Azure, etc). + * A single-node VictoriaMetrics may substitute moderately sized clusters built with competing solutions such as Thanos, M3DB, Cortex, InfluxDB or TimescaleDB. + * Easy operation: + * VictoriaMetrics consists of a single without external dependencies. + * All the configuration is done via explicit command-line flags with reasonable defaults. + * All the data is stored in a single directory pointed by `-storageDataPath` flag. + * Easy and fast backups from + to S3 or GCS with [vmbackup] / [vmrestore]. + * Storage is protected from corruption on unclean shutdown (i.e. OOM, hardware reset or `kill -9`) thanks to the storage architecture. + * Supports metrics' scraping, ingestion and backfilling via the following protocols: + * [Metrics from Prometheus exporters] + such as node_exporter. + * Prometheus remote write API( + * InfluxDB line protocol over HTTP, TCP and UDP. + * Graphite plaintext protocol + if `-graphiteListenAddr` is set. + * OpenTSDB put message, if `-opentsdbListenAddr` is set. + * HTTP OpenTSDB /api/put requests, if `-opentsdbHTTPListenAddr` is set. + * JSON line format. + * Native binary format. + * Prometheus exposition format. + * Arbitrary CSV data. + * Supports metrics' relabeling. See [these docs](#relabeling) for details. + * Ideally works with big amounts of time series data from Kubernetes, IoT sensors, connected cars, industrial telemetry, financial data and various Enterprise workloads. + * Has open source cluster version (https://github.com/VictoriaMetrics/VictoriaMetrics/tree/cluster). + + ** Configuration management** + * Prometheus scrape config can be edited with your favorite editor, its located at + `vi /var/snap/victoriametrics/current/etc/victoriametrics-scrape-config.yaml` + after changes, you can trigger config reread with `curl localhost:8248/-/reload`. + * Configuration tuning is possible with editing extra_flags: + `echo 'FLAGS="-selfScrapeInterval=10s -search.logSlowQueryDuration=20s"' > /var/snap/victoriametrics/current/extra_flags && snap restart victoriametrics` + * Data folder located at `/var/snap/victoriametrics/current/var/lib/victoriametrics/`. + +grade: stable # must be 'stable' to release into candidate/stable channels +confinement: strict # use 'strict' once you have the right plugs and slots + +parts: + build: + plugin: go + go-channel: 1.15/stable + go-importpath: github.com/VictoriaMetrics/VictoriaMetrics + source: . + source-type: local + build-packages: [build-essential, make] + override-build: | + make app-local APP_NAME=victoria-metrics + mkdir -p $SNAPCRAFT_PART_INSTALL/bin + cp -p $SNAPCRAFT_PART_BUILD/bin/victoria-metrics-prod $SNAPCRAFT_PART_INSTALL/bin/victoria-metrics + cp -p $SNAPCRAFT_PART_SRC/snap/local/victoriametrics-wrapper $SNAPCRAFT_PART_INSTALL/bin/ +apps: + victoriametrics: + command: bin/victoriametrics-wrapper + daemon: simple + restart-condition: always + restart-delay: 10s + plugs: [network,network-bind] + +plugs: + network: + network-bind: + +layout: + /var/lib/victoriametrics: + bind: $SNAP_DATA/var/lib/victoriametrics + /etc/victoriametrics-scrape-config.yaml: + bind-file: $SNAP_DATA/etc/victoriametrics-scrape-config.yaml +architectures: + - build-on: ['arm64', 'amd64'] + run-on: ['arm64','amd64'] \ No newline at end of file