summaryrefslogtreecommitdiff
path: root/monitoring/icinga-agent
blob: 328d65bff13f6154ce094064227f3237a143424e (plain)
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
98
99
100
101
102
103
104
105
106
107
108
#!/bin/sh
#
# Configirues an icinga2 agent (with on-demand csr signing)

icingauser="nagios"
certdir="/etc/icinga2/pki"
api_certdir="/var/lib/icinga2/certs"
nodename="$(hostname)"
global_zone="director-global"
master_fqdn=""

# Install packages
apt install -y icinga2 monitoring-plugins monitoring-plugins-contrib

# Register with master via self-service API
apikey=""
displayname=""
# Not pretty but gets the job done
dev="$(ip link | grep ^2: | head -1 | cut -d':' -f 2 | tr -d ' ')"
ipv4="$(ip addr show $dev | grep "inet " | sed "s/^\s*//;s/\// /" | cut -d ' ' -f 2)"
ipv6="$(ip addr show $dev | grep "inet6 " | sed "s/^\s*//;s/\// /" | cut -d ' ' -f 2)"

result=$(curl -i "http://$master_fqdn/icingaweb2/director/self-service/register-host?name=$nodename&key=$apikey" \
	 -H "Accept: application/json" \
	 -X "POST" \
	 -d "{\"display_name\":\"$displayname\",\"address\":\"$ipv4\",\"address6\":\"$ipv6\"}")
echo $result | grep -q error && \
		echo "error: unable to register with master (is the api key correct?)" && \
		exit 2


# Initialize PKI with master
icinga2 pki new-cert \
		--cn "pbs.home.local" \
		--cert "$certdir/$nodename.crt" \
		--csr "$certdir/$nodename.csr" \
		--key "$certdir/$nodename.key"


icinga2 pki save-cert \
		--host "$master_fqdn" \
		--port 5665 \
		--key "$certdir/$nodename.key" \
		--trustedcert "$certdir/trusted-master.crt"

icinga2 pki request \
		--host "$master_fqdn" \
		--port 5665 \
		--key "$certdir/$nodename.key" \
		--cert "$certdir/$nodename.crt" \
		--trustedcert "$certdir/trusted-master.crt" \
		--ca "$certdir/ca.crt" 

# Deploy config files
echo "include \"constants.conf\"
const NodeName = \"$nodename\"
include \"zones.conf\"
include \"features-enabled/*.conf\"
include <itl>
include <plugins>
include <plugins-contrib>
include <manubulon>
include <windows-plugins>
include <nscp>" > /etc/icinga2/icinga2.conf

echo "object Endpoint \"$nodename\" {}
object Zone \"$nodename\" {
  parent = \"$master_fqdn\"
  endpoints = [ \"$nodename\" ]
}
object Zone \"$master_fqdn\" {
  endpoints = [ \"$master_fqdn\" ]
}
object Endpoint \"$master_fqdn\" {
  host = \"$master_fqdn\"
}
object Zone \"$global_zone\" {
  global = true
}" > /etc/icinga2/zones.conf

echo "object ApiListener \"api\" {
  accept_commands = true
  accept_config = true
}" > /etc/icinga2/features-available/api.conf

# Enable API
icinga2 feature enable api
mkdir -p $api_certdir
cp $certdir/$nodename.crt $certdir/$nodename.key $certdir/ca.crt $api_certdir/
chown -R $icingauser:$icingauser $api_certdir/

# Next step
echo "

NOW

Run the following on the Icinga master:
fpr=\"\$(icinga2 ca list | tail -1 | cut -d '|' -f 1)\"
icinga2 ca sign \$fpr


THEN

Restart icinga2 on the agent:
\"systemctl restart icinga2\"

"