Ahoi,
Ich bin derzeit dabei, den Grafana Agenten zur Erfassung von Telemetriedaten zu testen, welche über den LGTM Stack
(Grafana, Loki, Mimir, Tempo und Prometheus) analysiert und überwacht werden.
Leider wurde der Support für ARMv6 eingestellt, auf den auch der Raspberry Pi zugreift. Glücklicherweise ist das
offizielle Repository gut dokumentiert, sodass es relativ einfach ist, das aktuell stabile Release auch für meinen
Raspberry Pi 4 zu kompilieren.
Den Weg dahin und worauf zu achten ist, möchte ich mit diesem Beitrag dokumentieren.
Go
Die Version im offiziellen Repository ist veraltet, deshalb müssen wir Go manuell installieren. Zunächst entfernen wir
Go, falls es bereits installiert ist, und installieren die erforderlichen Abhängigkeiten:
1
2
3
4
|
# Go entfernen und Abhängigkeiten installieren
sudo apt remove -y golang
sudo apt install -y build-essential npm
sudo npm install -g yarn
|
Jetzt müssen wir uns die aktuelle stabile Version für ARMv6l herunterladen: https://go.dev/dl/
1
|
wget https://go.dev/dl/go1.21.1.linux-armv6l.tar.gz
|
Dann wechseln wir in eine Root-Shell und folgen der offiziellen Dokumentation für
die Installation:
1
2
3
4
|
rm -rf /usr/local/go && tar -C /usr/local -xzf go1.21.1.linux-armv6l.tar.gz
export PATH=$PATH:/usr/local/go/bin
rm /usr/bin/go
go version
|
Entsprechend der heruntergeladenen Version sollte die neueste Ausgabe 1.21.1 entsprechen.
Grafana Agent
Nun holen wir uns den Grafana Agent und wechseln auf den Branch mit dem aktuellsten Stable-Release:
1
2
3
|
git clone https://github.com/grafana/agent
cd agent
git checkout v0.36.1
|
Kompilieren
Da es offiziell keine Unterstützung mehr für ARMv6 oder neuere Versionen gibt, müssen wir das Makefile anpassen.
Hierzu ersetze die Datei tools/make/packaging.mk mit folgendem Inhahlt:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
# Makefile.packaging adds release-packaging-specific targets.
PARENT_MAKEFILE := $(firstword $(MAKEFILE_LIST))
.PHONY: dist clean-dist
dist: dist-agent-binaries dist-agent-flow-binaries dist-agentctl-binaries dist-agent-packages dist-agent-flow-packages dist-agent-installer dist-agent-flow-installer
clean-dist:
rm -rf dist dist.temp
# Used for passing through environment variables to sub-makes.
#
# NOTE(rfratto): This *must* use `=` instead of `:=` so it's expanded at
# reference time. Earlier iterations of this file had each target explicitly
# list these, but it's too easy to forget to set on so this is used to ensure
# everything needed is always passed through.
PACKAGING_VARS = RELEASE_BUILD=1 GO_TAGS="$(GO_TAGS)" GOOS=$(GOOS) GOARCH=$(GOARCH) GOARM=$(GOARM) GOEXPERIMENT=$(GOEXPERIMENT)
#
# agent release binaries
#
dist-agent-binaries: dist/grafana-agent-linux-armv7
dist/grafana-agent-linux-armv7: GO_TAGS += netgo builtinassets promtail_journal_enabled
dist/grafana-agent-linux-armv7: GOOS := linux
dist/grafana-agent-linux-armv7: GOARCH := arm
dist/grafana-agent-linux-armv7: GOARM := 7
dist/grafana-agent-linux-armv7: generate-ui
$(PACKAGING_VARS) AGENT_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agent
#
# agentctl release binaries.
#
dist-agentctl-binaries: dist/grafana-agentctl-linux-armv7
dist/grafana-agentctl-linux-armv7: GO_TAGS += netgo promtail_journal_enabled
dist/grafana-agentctl-linux-armv7: GOOS := linux
dist/grafana-agentctl-linux-armv7: GOARCH := arm
dist/grafana-agentctl-linux-armv7: GOARM := 7
dist/grafana-agentctl-linux-armv7:
$(PACKAGING_VARS) AGENTCTL_BINARY=$@ $(MAKE) -f $(PARENT_MAKEFILE) agentctl
#
# DEB and RPM grafana-agent packages.
#
AGENT_ENVIRONMENT_FILE_rpm := /etc/sysconfig/grafana-agent
AGENT_ENVIRONMENT_FILE_deb := /etc/default/grafana-agent
# generate_agent_fpm(deb|rpm, package arch, agent arch, output file)
define generate_agent_fpm =
fpm -s dir -v $(AGENT_PACKAGE_VERSION) -a $(2) \
-n grafana-agent --iteration $(AGENT_PACKAGE_RELEASE) -f \
--log error \
--license "Apache 2.0" \
--vendor "Grafana Labs" \
--url "https://github.com/grafana/agent" \
--rpm-digest sha256 \
-t $(1) \
--after-install packaging/grafana-agent/$(1)/control/postinst \
--before-remove packaging/grafana-agent/$(1)/control/prerm \
--config-files /etc/grafana-agent.yaml \
--config-files $(AGENT_ENVIRONMENT_FILE_$(1)) \
--rpm-rpmbuild-define "_build_id_links none" \
--package $(4) \
dist/grafana-agent-linux-$(3)=/usr/bin/grafana-agent \
dist/grafana-agentctl-linux-$(3)=/usr/bin/grafana-agentctl \
packaging/grafana-agent/grafana-agent.yaml=/etc/grafana-agent.yaml \
packaging/grafana-agent/environment-file=$(AGENT_ENVIRONMENT_FILE_$(1)) \
packaging/grafana-agent/$(1)/grafana-agent.service=/usr/lib/systemd/system/grafana-agent.service
endef
AGENT_PACKAGE_VERSION := $(patsubst v%,%,$(VERSION))
AGENT_PACKAGE_RELEASE := 1
AGENT_PACKAGE_PREFIX := dist/grafana-agent-$(AGENT_PACKAGE_VERSION)-$(AGENT_PACKAGE_RELEASE)
.PHONY: dist-agent-packages
dist-agent-packages: dist-agent-packages-armv7
.PHONY: dist-agent-packages-armv7
dist-agent-packages-armv7: dist/grafana-agent-linux-armv7 dist/grafana-agentctl-linux-armv7
ifeq ($(USE_CONTAINER),1)
$(RERUN_IN_CONTAINER)
else
$(call generate_agent_fpm,deb,armhf,armv7,$(AGENT_PACKAGE_PREFIX).armv7.deb)
endif
#
# DEB and RPM grafana-agent-flow packages.
#
FLOW_ENVIRONMENT_FILE_rpm := /etc/sysconfig/grafana-agent-flow
FLOW_ENVIRONMENT_FILE_deb := /etc/default/grafana-agent-flow
|
Spätestens jetzt solltest du dir einen Kaffee holen, denn wir kompilieren die Binaries direkt auf dem RPi
1
|
VERSION=0.36.1 GOARCH=arm GOARM=7 CGO_ENABLED=0 RELEASE_BUILD=1 make dist-agent-packages-armv7
|
Nach ~15 Minuten findest du im Unterordner dist ein fertiges Installationspaket grafana-agent-0.36.1-1.armv7.deb,
welches sich wie gewohnt installieren lässt
1
|
dpkg -i dist/grafana-agent-0.36.1-1.armv7.deb
|
Alle weiteren Schritte können direkt
der Dokumentation entnommen werden!