mirror of
https://github.com/VictoriaMetrics/VictoriaMetrics.git
synced 2025-03-21 15:45:01 +00:00
Adds packer build for server with VM Single node in vultr.com marketplace (#3142)
* adds packer build for server with VM Single node in vultr.com marketplace * fix missed varibale
This commit is contained in:
parent
e96ccf3f71
commit
32be84fc75
13 changed files with 642 additions and 0 deletions
12
deployment/marketplace/vultr/Makefile
Normal file
12
deployment/marketplace/vultr/Makefile
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
RELEASE_NAME := vm-vultr-server
|
||||||
|
VM_VERSION ?= $(shell git describe --abbrev=0 --tags)
|
||||||
|
PACKER_LOG := 1
|
||||||
|
PACKER_LOG_PATH := packer.log
|
||||||
|
|
||||||
|
.PHONY: $(MAKECMDGOALS)
|
||||||
|
|
||||||
|
release-victoria-metrics-vultr-server:
|
||||||
|
cp ./victoriametrics-single/etc/update-motd.d/99-one-click.tpl ./victoriametrics-single/etc/update-motd.d/99-one-click
|
||||||
|
sed -i -e "s/VM_VERSION/${VM_VERSION}/g" ./victoriametrics-single/etc/update-motd.d/99-one-click
|
||||||
|
packer init victoriametrics-single/victoriametrics-single.pkr.hcl
|
||||||
|
packer build victoriametrics-single/victoriametrics-single.pkr.hcl
|
55
deployment/marketplace/vultr/README.md
Normal file
55
deployment/marketplace/vultr/README.md
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
## Application summary
|
||||||
|
|
||||||
|
VictoriaMetrics is a fast and scalable open source time series database and monitoring solution.
|
||||||
|
|
||||||
|
## Description
|
||||||
|
|
||||||
|
VictoriaMetrics is a free [open source time series database](https://en.wikipedia.org/wiki/Time_series_database) (TSDB) and monitoring solution, designed to collect, store and process real-time metrics.
|
||||||
|
|
||||||
|
It supports the [Prometheus](https://en.wikipedia.org/wiki/Prometheus_(software)) pull model and various push protocols ([Graphite](https://en.wikipedia.org/wiki/Graphite_(software)), [InfluxDB](https://en.wikipedia.org/wiki/InfluxDB), OpenTSDB) for data ingestion. It is optimized for storage with high-latency IO, low IOPS and time series with [high churn rate](https://docs.victoriametrics.com/FAQ.html#what-is-high-churn-rate).
|
||||||
|
|
||||||
|
For reading the data and evaluating alerting rules, VictoriaMetrics supports the PromQL, [MetricsQL](https://docs.victoriametrics.com/MetricsQL.html) and Graphite query languages. VictoriaMetrics Single is fully autonomous and can be used as a long-term storage for time series.
|
||||||
|
|
||||||
|
[VictoriaMetrics Single](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html) = Hassle-free monitoring solution. Easily handles 10M+ of active time series on a single instance. Perfect for small and medium environments.
|
||||||
|
|
||||||
|
## Getting started after deploying VictoriaMetrics Single
|
||||||
|
|
||||||
|
### Config
|
||||||
|
|
||||||
|
VictoriaMetrics configuration is located at `/etc/victoriametrics/single/scrape.yml` on the server.
|
||||||
|
This One Click app uses 8428, 2003, 4242 and 8089 ports to accept metrics from different protocols. It's recommended to disable ports for protocols which are not needed. [Ubuntu firewall](https://help.ubuntu.com/community/UFW) can be used to easily disable access for specific ports.
|
||||||
|
|
||||||
|
### Scraping metrics
|
||||||
|
|
||||||
|
VictoriaMetrics supports metrics scraping in the same way as Prometheus does. Check the configuration file to edit scraping targets. See more details about scraping at [How to scrape Prometheus exporters](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#how-to-scrape-prometheus-exporters-such-as-node-exporter).
|
||||||
|
|
||||||
|
### Sending metrics
|
||||||
|
|
||||||
|
Besides scraping, VictoriaMetrics accepts write requests for various ingestion protocols. This One Click app supports the following protocols:
|
||||||
|
|
||||||
|
- [Datadog](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#how-to-send-data-from-datadog-agent), [Influx (telegraph)](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#how-to-send-data-from-influxdb-compatible-agents-such-as-telegraf), [JSON](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#how-to-import-data-in-json-line-format), [CSV](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#how-to-import-csv-data), [Prometheus](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#how-to-import-data-in-prometheus-exposition-format) on port :8428
|
||||||
|
- [Graphite (statsd)](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#how-to-send-data-from-graphite-compatible-agents-such-as-statsd) on port :2003 tcp/udp
|
||||||
|
- [OpenTSDB](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#how-to-send-data-from-opentsdb-compatible-agents) on port :4242
|
||||||
|
- Influx (telegraph) on port :8089 tcp/udp
|
||||||
|
|
||||||
|
See more details and examples in [official documentation](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html).
|
||||||
|
|
||||||
|
### UI
|
||||||
|
|
||||||
|
VictoriaMetrics provides a [User Interface (UI)](https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#vmui) for query troubleshooting and exploration. The UI is available at `http://your_server_public_ipv4:8428/vmui`. It lets users explore query results via graphs and tables.
|
||||||
|
|
||||||
|
To check it, open the following in your browser `http://your_server_public_ipv4:8428/vmui` and then enter `vm_app_uptime_seconds` to the Query Field to Execute the Query.
|
||||||
|
|
||||||
|
Run the following command to query and retrieve a result from VictoriaMetrics Single with `curl`:
|
||||||
|
|
||||||
|
```console
|
||||||
|
curl -sg http://your_server_public_ipv4:8428/api/v1/query_range?query=vm_app_uptime_seconds | jq
|
||||||
|
```
|
||||||
|
|
||||||
|
### Accessing
|
||||||
|
|
||||||
|
Once the **server** is created, you can use Vultr's web console to start a session or SSH directly to the server as root:
|
||||||
|
|
||||||
|
```console
|
||||||
|
ssh root@your_server_public_ipv4
|
||||||
|
```
|
12
deployment/marketplace/vultr/RELEASE_GUIDE.md
Normal file
12
deployment/marketplace/vultr/RELEASE_GUIDE.md
Normal file
|
@ -0,0 +1,12 @@
|
||||||
|
## Release guide for Vultr Marketplace
|
||||||
|
|
||||||
|
### Build image
|
||||||
|
|
||||||
|
1. To build the snapshot in Vultr account you will need `VULTR_API_KEY` and [packer](https://learn.hashicorp.com/tutorials/packer/get-started-install-cli).
|
||||||
|
2. `VULTR_API_KEY` can be generated on [https://my.vultr.com/settings/#settingsapi](https://my.vultr.com/settings/#settingsapi) or use already generated from OnePassword.
|
||||||
|
3. Choose prefered version of VictoriaMetrics on [Github releases](https://github.com/VictoriaMetrics/VictoriaMetrics/releases) page.
|
||||||
|
4. Set variables `VULTR_API_KEY` with `VM_VERSION` for `packer` environment and run make from example below:
|
||||||
|
|
||||||
|
```console
|
||||||
|
make release-victoria-metrics-vultr-server VULTR_API_KEY="your_token_here" VM_VERSION="prefered_release_version"
|
||||||
|
```
|
317
deployment/marketplace/vultr/helper-scripts/vultr-helper.sh
Executable file
317
deployment/marketplace/vultr/helper-scripts/vultr-helper.sh
Executable file
|
@ -0,0 +1,317 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# shopt -s inherit_errexit
|
||||||
|
set -o errexit
|
||||||
|
|
||||||
|
###################################################################
|
||||||
|
## Vultr Marketplace Helper Functions
|
||||||
|
|
||||||
|
function error_detect_on()
|
||||||
|
{
|
||||||
|
set -euo pipefail
|
||||||
|
}
|
||||||
|
|
||||||
|
function error_detect_off()
|
||||||
|
{
|
||||||
|
set +euo pipefail
|
||||||
|
}
|
||||||
|
|
||||||
|
function enable_verbose_commands()
|
||||||
|
{
|
||||||
|
set -x
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable_verbose_commands()
|
||||||
|
{
|
||||||
|
set +x
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_metadata_item()
|
||||||
|
{
|
||||||
|
local item_path="${1:-}"
|
||||||
|
local item_value
|
||||||
|
|
||||||
|
item_value="$(curl --fail --silent --header "Metadata-Token: vultr" "http://169.254.169.254/${item_path}")"
|
||||||
|
|
||||||
|
echo "${item_value}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_hostname()
|
||||||
|
{
|
||||||
|
get_metadata_item "latest/meta-data/hostname"
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_userdata()
|
||||||
|
{
|
||||||
|
get_metadata_item "latest/user-data"
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_sshkeys()
|
||||||
|
{
|
||||||
|
get_metadata_item "current/ssh-keys"
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_var()
|
||||||
|
{
|
||||||
|
local var_name="${1:-}"
|
||||||
|
local var_val
|
||||||
|
var_val="$(get_metadata_item "v1/internal/app-${var_name}" 2>/dev/null)"
|
||||||
|
|
||||||
|
eval "${var_name}='${var_val}'"
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_ip()
|
||||||
|
{
|
||||||
|
local ip_var="${1:-}"
|
||||||
|
local ip_val
|
||||||
|
ip_val="$(get_metadata_item "latest/meta-data/public-ipv4" 2>/dev/null)"
|
||||||
|
|
||||||
|
eval "${ip_var}='${ip_val}'"
|
||||||
|
}
|
||||||
|
|
||||||
|
function wait_on_apt_lock()
|
||||||
|
{
|
||||||
|
until ! lsof -t /var/cache/apt/archives/lock /var/lib/apt/lists/lock /var/lib/dpkg/lock >/dev/null 2>&1
|
||||||
|
do
|
||||||
|
echo "Waiting 3 for apt lock currently held by another process."
|
||||||
|
sleep 3
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function apt_safe()
|
||||||
|
{
|
||||||
|
wait_on_apt_lock
|
||||||
|
apt install -y "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
function apt_update_safe()
|
||||||
|
{
|
||||||
|
wait_on_apt_lock
|
||||||
|
apt update -y
|
||||||
|
}
|
||||||
|
|
||||||
|
function apt_upgrade_safe()
|
||||||
|
{
|
||||||
|
wait_on_apt_lock
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt upgrade -y
|
||||||
|
}
|
||||||
|
|
||||||
|
function apt_remove_safe()
|
||||||
|
{
|
||||||
|
wait_on_apt_lock
|
||||||
|
apt remove -y --auto-remove "$@"
|
||||||
|
}
|
||||||
|
|
||||||
|
function apt_clean_safe()
|
||||||
|
{
|
||||||
|
wait_on_apt_lock
|
||||||
|
apt autoremove -y
|
||||||
|
|
||||||
|
wait_on_apt_lock
|
||||||
|
apt autoclean -y
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_and_clean_packages()
|
||||||
|
{
|
||||||
|
# RHEL/CentOS
|
||||||
|
if [[ -f /etc/redhat-release ]]; then
|
||||||
|
yum update -y
|
||||||
|
yum clean all
|
||||||
|
# Ubuntu / Debian
|
||||||
|
elif grep -qs "debian" /etc/os-release 2>/dev/null; then
|
||||||
|
apt_update_safe
|
||||||
|
apt_upgrade_safe
|
||||||
|
apt_clean_safe
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_vultr_kernel_option()
|
||||||
|
{
|
||||||
|
# RHEL/CentOS
|
||||||
|
if [[ -f /etc/redhat-release ]]; then
|
||||||
|
/sbin/grubby --update-kernel=ALL --args vultr
|
||||||
|
# Ubuntu / Debian
|
||||||
|
elif grep -qs "debian" /etc/os-release 2>/dev/null; then
|
||||||
|
sed -i -e "/^GRUB_CMDLINE_LINUX_DEFAULT=/ s/\"$/ vultr\"/" /etc/default/grub
|
||||||
|
update-grub
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_cloud_init()
|
||||||
|
{
|
||||||
|
local cloud_init_exe
|
||||||
|
cloud_init_exe="$(command -v cloud-init >/dev/null 2>&1)"
|
||||||
|
if [[ -x "${cloud_init_exe}" ]]; then
|
||||||
|
echo "cloud-init is already installed."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
local release_version="${1:-"latest"}"
|
||||||
|
if [[ "${release_version}" != "latest" && "${release_version}" != "nightly" ]]; then
|
||||||
|
echo "${release_version} is an invalid release option. Allowed: latest, nightly"
|
||||||
|
exit 255
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Lets remove all traces of previously installed cloud-init
|
||||||
|
# Ubuntu installs have proven problematic with their left over
|
||||||
|
# configs for the installer in recent versions
|
||||||
|
cleanup_cloudinit
|
||||||
|
|
||||||
|
update_and_clean_packages
|
||||||
|
|
||||||
|
local build_type
|
||||||
|
local package_ext
|
||||||
|
|
||||||
|
[[ -e /etc/os-release ]] && . /etc/os-release
|
||||||
|
case "${ID:-}" in
|
||||||
|
debian)
|
||||||
|
build_type="debian"
|
||||||
|
package_ext="deb"
|
||||||
|
;;
|
||||||
|
fedora)
|
||||||
|
build_type="rhel"
|
||||||
|
package_ext="rpm"
|
||||||
|
;;
|
||||||
|
ubuntu)
|
||||||
|
build_type="universal"
|
||||||
|
package_ext="deb"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
case "${ID_LIKE:-}" in
|
||||||
|
*rhel*)
|
||||||
|
build_type="rhel"
|
||||||
|
package_ext="rpm"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unable to determine OS. Please install from source!"
|
||||||
|
exit 255
|
||||||
|
esac
|
||||||
|
esac
|
||||||
|
|
||||||
|
local cloud_init_package="cloud-init_${build_type}_${release_version}.${package_ext}"
|
||||||
|
wget -O "/tmp/${cloud_init_package}" "https://ewr1.vultrobjects.com/cloud_init_beta/${cloud_init_package}"
|
||||||
|
|
||||||
|
case "${package_ext}" in
|
||||||
|
rpm)
|
||||||
|
yum install -y "/tmp/${cloud_init_package}"
|
||||||
|
;;
|
||||||
|
deb)
|
||||||
|
apt_safe "/tmp/${cloud_init_package}"
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "Unable to determine package installation method."
|
||||||
|
exit 255
|
||||||
|
esac
|
||||||
|
|
||||||
|
rm -f "/tmp/${cloud_init_package}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function cleanup_cloudinit()
|
||||||
|
{
|
||||||
|
rm -rf \
|
||||||
|
/etc/cloud \
|
||||||
|
/etc/systemd/system/cloud-init.target.wants/* \
|
||||||
|
/lib/systemd/system/cloud* \
|
||||||
|
/run/cloud-init \
|
||||||
|
/usr/bin/cloud* \
|
||||||
|
/usr/lib/cloud* \
|
||||||
|
/usr/local/bin/cloud* \
|
||||||
|
/usr/src/cloud* \
|
||||||
|
/var/log/cloud*
|
||||||
|
}
|
||||||
|
|
||||||
|
function clean_tmp()
|
||||||
|
{
|
||||||
|
mkdir -p /tmp
|
||||||
|
chmod 1777 /tmp
|
||||||
|
rm -rf /tmp/* /var/tmp/*
|
||||||
|
}
|
||||||
|
|
||||||
|
function clean_keys()
|
||||||
|
{
|
||||||
|
rm -f /root/.ssh/authorized_keys /etc/ssh/*key*
|
||||||
|
touch /etc/ssh/revoked_keys
|
||||||
|
chmod 600 /etc/ssh/revoked_keys
|
||||||
|
}
|
||||||
|
|
||||||
|
function clean_logs()
|
||||||
|
{
|
||||||
|
find /var/log -mtime -1 -type f -exec truncate -s 0 {} \;
|
||||||
|
rm -rf \
|
||||||
|
/var/log/*.[0-9] \
|
||||||
|
/var/log/*.gz \
|
||||||
|
/var/log/*.log \
|
||||||
|
/var/log/lastlog \
|
||||||
|
/var/log/wtmp
|
||||||
|
|
||||||
|
: > /var/log/auth.log
|
||||||
|
}
|
||||||
|
|
||||||
|
function clean_history()
|
||||||
|
{
|
||||||
|
history -c
|
||||||
|
: > /root/.bash_history
|
||||||
|
unset HISTFILE
|
||||||
|
}
|
||||||
|
|
||||||
|
function clean_mloc()
|
||||||
|
{
|
||||||
|
/usr/bin/updatedb || true
|
||||||
|
}
|
||||||
|
|
||||||
|
function clean_random()
|
||||||
|
{
|
||||||
|
rm -f /var/lib/systemd/random-seed
|
||||||
|
}
|
||||||
|
|
||||||
|
function clean_machine_id()
|
||||||
|
{
|
||||||
|
[[ -e /etc/machine-id ]] && : > /etc/machine-id
|
||||||
|
[[ -e /var/lib/dbus/machine-id ]] && : > /var/lib/dbus/machine-id
|
||||||
|
}
|
||||||
|
|
||||||
|
function clean_free_space()
|
||||||
|
{
|
||||||
|
dd if=/dev/zero of=/zerofile || true
|
||||||
|
sync
|
||||||
|
rm -f /zerofile
|
||||||
|
sync
|
||||||
|
}
|
||||||
|
|
||||||
|
function trim_ssd()
|
||||||
|
{
|
||||||
|
fstrim / || true
|
||||||
|
}
|
||||||
|
|
||||||
|
function cleanup_marketplace_scripts()
|
||||||
|
{
|
||||||
|
rm -f /root/*.sh
|
||||||
|
}
|
||||||
|
|
||||||
|
function disable_network_manager()
|
||||||
|
{
|
||||||
|
## Disable NetworkManager, replace with network-scripts
|
||||||
|
systemctl disable --now NetworkManager
|
||||||
|
sed -i \
|
||||||
|
-e 's/^ONBOOT.*/ONBOOT=yes/g' \
|
||||||
|
-e 's/^NM_CONTROLLED.*/NM_CONTROLLED=no/g' /etc/sysconfig/network-scripts/ifcfg-*
|
||||||
|
yum install -y network-scripts
|
||||||
|
}
|
||||||
|
|
||||||
|
function clean_system()
|
||||||
|
{
|
||||||
|
|
||||||
|
update_and_clean_packages
|
||||||
|
set_vultr_kernel_option
|
||||||
|
clean_tmp
|
||||||
|
clean_keys
|
||||||
|
clean_logs
|
||||||
|
clean_history
|
||||||
|
clean_random
|
||||||
|
clean_machine_id
|
||||||
|
clean_mloc
|
||||||
|
clean_free_space
|
||||||
|
trim_ssd
|
||||||
|
|
||||||
|
cleanup_marketplace_scripts
|
||||||
|
}
|
|
@ -0,0 +1,29 @@
|
||||||
|
[Unit]
|
||||||
|
Description=VictoriaMetrics is a fast, cost-effective and scalable monitoring solution and time series database.
|
||||||
|
# https://docs.victoriametrics.com
|
||||||
|
After=network.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=simple
|
||||||
|
User=victoriametrics
|
||||||
|
Group=victoriametrics
|
||||||
|
WorkingDirectory=/var/lib/victoria-metrics-data
|
||||||
|
StartLimitBurst=5
|
||||||
|
StartLimitInterval=0
|
||||||
|
Restart=on-failure
|
||||||
|
RestartSec=5
|
||||||
|
EnvironmentFile=-/etc/victoriametrics/single/victoriametrics.conf
|
||||||
|
ExecStart=/usr/bin/victoria-metrics-prod $ARGS
|
||||||
|
ExecStop=/bin/kill -s SIGTERM $MAINPID
|
||||||
|
ExecReload=/bin/kill -HUP $MAINPID
|
||||||
|
# See docs https://docs.victoriametrics.com/Single-server-VictoriaMetrics.html#tuning
|
||||||
|
ProtectSystem=full
|
||||||
|
LimitNOFILE=1048576
|
||||||
|
LimitNPROC=1048576
|
||||||
|
LimitCORE=infinity
|
||||||
|
StandardOutput=syslog
|
||||||
|
StandardError=syslog
|
||||||
|
SyslogIdentifier=vmsingle
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
WantedBy=multi-user.target
|
|
@ -0,0 +1,35 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Configured as part of the DigitalOcean 1-Click Image build process
|
||||||
|
|
||||||
|
myip=$(hostname -I | awk '{print$1}')
|
||||||
|
cat <<EOF
|
||||||
|
********************************************************************************
|
||||||
|
|
||||||
|
Welcome to VictoriaMetrics server!
|
||||||
|
To keep this server secure, the UFW firewall is enabled.
|
||||||
|
All ports are BLOCKED except 22 (SSH), 80 (HTTP), and 443 (HTTPS), 8428 (VictoriaMetrics HTTP), 8089 (VictoriaMetrics Influx),
|
||||||
|
4242 (VictoriaMetrics OpenTSDB), 2003 (VictoriaMetrics Graphite)
|
||||||
|
|
||||||
|
In a web browser, you can view:
|
||||||
|
* The VictoriaMetrics Quickstart guide: https://kutt.it/1click-quickstart
|
||||||
|
|
||||||
|
On the server:
|
||||||
|
* The default VictoriaMetrics root is located at /var/lib/victoria-metrics-data
|
||||||
|
* VictoriaMetrics is running on ports: 8428, 8089, 4242, 2003 and they are bound to the local interface.
|
||||||
|
|
||||||
|
********************************************************************************
|
||||||
|
# This image includes version VM_VERSION of VictoriaMetrics.
|
||||||
|
# See Release notes https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/VM_VERSION
|
||||||
|
|
||||||
|
# Website: https://victoriametrics.com
|
||||||
|
# Documentation: https://docs.victoriametrics.com
|
||||||
|
# VictoriaMetrics Github : https://github.com/VictoriaMetrics/VictoriaMetrics
|
||||||
|
# VictoriaMetrics Slack Community: https://slack.victoriametrics.com
|
||||||
|
# VictoriaMetrics Telegram Community: https://t.me/VictoriaMetrics_en
|
||||||
|
# VictoriaMetrics in Twitter: https://twitter.com/VictoriaMetrics
|
||||||
|
|
||||||
|
# VictoriaMetrics config: /etc/victoriametrics/single/victoriametrics.conf
|
||||||
|
|
||||||
|
********************************************************************************
|
||||||
|
EOF
|
|
@ -0,0 +1,35 @@
|
||||||
|
#!/bin/sh
|
||||||
|
#
|
||||||
|
# Configured as part of the DigitalOcean 1-Click Image build process
|
||||||
|
|
||||||
|
myip=$(hostname -I | awk '{print$1}')
|
||||||
|
cat <<EOF
|
||||||
|
********************************************************************************
|
||||||
|
|
||||||
|
Welcome to VictoriaMetrics server!
|
||||||
|
To keep this server secure, the UFW firewall is enabled.
|
||||||
|
All ports are BLOCKED except 22 (SSH), 80 (HTTP), and 443 (HTTPS), 8428 (VictoriaMetrics HTTP), 8089 (VictoriaMetrics Influx),
|
||||||
|
4242 (VictoriaMetrics OpenTSDB), 2003 (VictoriaMetrics Graphite)
|
||||||
|
|
||||||
|
In a web browser, you can view:
|
||||||
|
* The VictoriaMetrics Quickstart guide: https://kutt.it/1click-quickstart
|
||||||
|
|
||||||
|
On the server:
|
||||||
|
* The default VictoriaMetrics root is located at /var/lib/victoria-metrics-data
|
||||||
|
* VictoriaMetrics is running on ports: 8428, 8089, 4242, 2003 and they are bound to the local interface.
|
||||||
|
|
||||||
|
********************************************************************************
|
||||||
|
# This image includes version VM_VERSION of VictoriaMetrics.
|
||||||
|
# See Release notes https://github.com/VictoriaMetrics/VictoriaMetrics/releases/tag/VM_VERSION
|
||||||
|
|
||||||
|
# Website: https://victoriametrics.com
|
||||||
|
# Documentation: https://docs.victoriametrics.com
|
||||||
|
# VictoriaMetrics Github : https://github.com/VictoriaMetrics/VictoriaMetrics
|
||||||
|
# VictoriaMetrics Slack Community: https://slack.victoriametrics.com
|
||||||
|
# VictoriaMetrics Telegram Community: https://t.me/VictoriaMetrics_en
|
||||||
|
# VictoriaMetrics in Twitter: https://twitter.com/VictoriaMetrics
|
||||||
|
|
||||||
|
# VictoriaMetrics config: /etc/victoriametrics/single/victoriametrics.conf
|
||||||
|
|
||||||
|
********************************************************************************
|
||||||
|
EOF
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Scrape config example
|
||||||
|
#
|
||||||
|
scrape_configs:
|
||||||
|
- job_name: self_scrape
|
||||||
|
scrape_interval: 10s
|
||||||
|
static_configs:
|
||||||
|
- targets: ['127.0.0.1:8428']
|
|
@ -0,0 +1 @@
|
||||||
|
ARGS="-promscrape.config=/etc/victoriametrics/single/scrape.yml -storageDataPath=/var/lib/victoria-metrics-data -retentionPeriod=12 -httpListenAddr=:8428 -graphiteListenAddr=:2003 -opentsdbListenAddr=:4242 -influxListenAddr=:8089 -enableTCP6"
|
4
deployment/marketplace/vultr/victoriametrics-single/setup-per-boot.sh
Executable file
4
deployment/marketplace/vultr/victoriametrics-single/setup-per-boot.sh
Executable file
|
@ -0,0 +1,4 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
## Run on every boot.
|
||||||
|
echo $(date -u) ": System booted." >> /var/log/per-boot.log
|
29
deployment/marketplace/vultr/victoriametrics-single/setup-per-instance.sh
Executable file
29
deployment/marketplace/vultr/victoriametrics-single/setup-per-instance.sh
Executable file
|
@ -0,0 +1,29 @@
|
||||||
|
#!/bin/bash
|
||||||
|
## Runs once-and-only-once at first boot per instance.
|
||||||
|
|
||||||
|
## Report the start time to a logfile.
|
||||||
|
echo $(date -u) ": System provisioning started." >> /var/log/per-instance.log
|
||||||
|
|
||||||
|
apt update
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt -qq full-upgrade -y
|
||||||
|
DEBIAN_FRONTEND=noninteractive apt -qq install -y ufw wget software-properties-common ssh
|
||||||
|
|
||||||
|
# Configure UFW
|
||||||
|
|
||||||
|
sed -e 's|DEFAULT_FORWARD_POLICY=.*|DEFAULT_FORWARD_POLICY="ACCEPT"|g' \
|
||||||
|
-i /etc/default/ufw
|
||||||
|
|
||||||
|
ufw allow ssh comment "SSH port"
|
||||||
|
ufw allow http comment "HTTP port"
|
||||||
|
ufw allow https comment "HTTPS port"
|
||||||
|
ufw allow 8428 comment "VictoriaMetrics Single HTTP port"
|
||||||
|
ufw allow 8089/tcp comment "TCP Influx Listen port for VictoriaMetrics"
|
||||||
|
ufw allow 8089/udp comment "UDP Influx Listen port for VictoriaMetrics"
|
||||||
|
ufw allow 2003/tcp comment "TCP Graphite Listen port for VictoriaMetrics"
|
||||||
|
ufw allow 2003/udp comment "UDP Graphite Listen port for VictoriaMetrics"
|
||||||
|
ufw allow 4242 comment "OpenTSDB Listen port for VictoriaMetrics"
|
||||||
|
|
||||||
|
ufw --force enable
|
||||||
|
|
||||||
|
## Report the end time to a logfile.
|
||||||
|
echo $(date -u) ": System provisioning script is complete." >> /var/log/per-instance.log
|
|
@ -0,0 +1,65 @@
|
||||||
|
variable "vultr_api_key" {
|
||||||
|
type = string
|
||||||
|
default = "${env("VULTR_API_KEY")}"
|
||||||
|
sensitive = true
|
||||||
|
}
|
||||||
|
|
||||||
|
variable "victoriametrics_version" {
|
||||||
|
type = string
|
||||||
|
default = "${env("VM_VERSION")}"
|
||||||
|
description = "Version number of the desired VictoriaMetrics binary."
|
||||||
|
}
|
||||||
|
|
||||||
|
packer {
|
||||||
|
required_plugins {
|
||||||
|
vultr = {
|
||||||
|
version = ">=v2.3.2"
|
||||||
|
source = "github.com/vultr/vultr"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
source "vultr" "victoriametrics-single" {
|
||||||
|
api_key = "${var.vultr_api_key}"
|
||||||
|
os_id = "387"
|
||||||
|
plan_id = "vc2-1c-1gb"
|
||||||
|
region_id = "ewr"
|
||||||
|
snapshot_description = "victoriametrics-snapshot-${formatdate("YYYY-MM-DD hh:mm", timestamp())}"
|
||||||
|
ssh_username = "root"
|
||||||
|
state_timeout = "10m"
|
||||||
|
}
|
||||||
|
|
||||||
|
build {
|
||||||
|
sources = ["source.vultr.victoriametrics-single"]
|
||||||
|
|
||||||
|
provisioner "file" {
|
||||||
|
source = "helper-scripts/vultr-helper.sh"
|
||||||
|
destination = "/root/vultr-helper.sh"
|
||||||
|
}
|
||||||
|
|
||||||
|
provisioner "file" {
|
||||||
|
source = "victoriametrics-single/setup-per-boot.sh"
|
||||||
|
destination = "/root/setup-per-boot.sh"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Copy configuration files
|
||||||
|
provisioner "file" {
|
||||||
|
destination = "/etc/"
|
||||||
|
source = "victoriametrics-single/etc/"
|
||||||
|
}
|
||||||
|
|
||||||
|
provisioner "file" {
|
||||||
|
source = "victoriametrics-single/setup-per-instance.sh"
|
||||||
|
destination = "/root/setup-per-instance.sh"
|
||||||
|
}
|
||||||
|
|
||||||
|
provisioner "shell" {
|
||||||
|
environment_vars = [
|
||||||
|
"VM_VERSION=${var.victoriametrics_version}",
|
||||||
|
"DEBIAN_FRONTEND=noninteractive"
|
||||||
|
]
|
||||||
|
script = "victoriametrics-single/victoriametrics-single.sh"
|
||||||
|
remote_folder = "/root"
|
||||||
|
remote_file = "victoriametrics-single.sh"
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,41 @@
|
||||||
|
#!/bin/bash
|
||||||
|
################################################
|
||||||
|
## Prerequisites
|
||||||
|
chmod +x /root/vultr-helper.sh
|
||||||
|
. /root/vultr-helper.sh
|
||||||
|
error_detect_on
|
||||||
|
install_cloud_init latest
|
||||||
|
|
||||||
|
################################################
|
||||||
|
## Create victoriametrics user
|
||||||
|
groupadd -r victoriametrics
|
||||||
|
useradd -g victoriametrics -d /var/lib/victoria-metrics-data -s /sbin/nologin --system victoriametrics
|
||||||
|
|
||||||
|
mkdir -p /var/lib/victoria-metrics-data
|
||||||
|
chown -R victoriametrics:victoriametrics /var/lib/victoria-metrics-data
|
||||||
|
|
||||||
|
################################################
|
||||||
|
## Download VictoriaMetrics
|
||||||
|
wget https://github.com/VictoriaMetrics/VictoriaMetrics/releases/download/${VM_VERSION}/victoria-metrics-linux-amd64-${VM_VERSION}.tar.gz -O /tmp/victoria-metrics.tar.gz
|
||||||
|
tar xvf /tmp/victoria-metrics.tar.gz -C /usr/bin
|
||||||
|
chmod +x /usr/bin/victoria-metrics-prod
|
||||||
|
chown root:root /usr/bin/victoria-metrics-prod
|
||||||
|
|
||||||
|
################################################
|
||||||
|
## Install provisioning scripts
|
||||||
|
mkdir -p /var/lib/cloud/scripts/per-boot/
|
||||||
|
mkdir -p /var/lib/cloud/scripts/per-instance/
|
||||||
|
|
||||||
|
mv /root/setup-per-boot.sh /var/lib/cloud/scripts/per-boot/setup-per-boot.sh
|
||||||
|
mv /root/setup-per-instance.sh /var/lib/cloud/scripts/per-instance/setup-per-instance.sh
|
||||||
|
|
||||||
|
chmod +x /var/lib/cloud/scripts/per-boot/setup-per-boot.sh
|
||||||
|
chmod +x /var/lib/cloud/scripts/per-instance/setup-per-instance.sh
|
||||||
|
|
||||||
|
# Enable VictoriaMetrics on boot
|
||||||
|
systemctl enable vmsingle.service
|
||||||
|
|
||||||
|
################################################
|
||||||
|
## Prepare server for Marketplace snapshot
|
||||||
|
|
||||||
|
clean_system
|
Loading…
Reference in a new issue