How-To: Grafana Agent auf einem Raspberry Pi 4 installieren

 | 688 Wörter


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!

#arm #armhf #armv6 #armv7 #grafana #grafana-agent #grafana-loki #linux #loki #mimir #raspberry-pi #raspberry-pi-4 #rpi