Hallo zusammen,
ich habe eine Frage zu unserer Icinga-Konfiguration, bei der ich mir nicht sicher bin, ob diese so korrekt ist. Wir haben eine Icinga-Masterinstanz und zwei über VPN angebundene
Satelliten, an denen wiederum Linux-Server hängen, auf denen der Icinga Client installiert ist. Im folgenden die aus meiner Sicht wesentlichen Konfigurationsdateien (auszugsweise). Sowohl Master als auch die Satelliten führen Checks aus. Die Konfiguration wird vom Master auf die beiden Satelliten gepusht, client und clientA führen als icinga Client über eine Command-Execution Bridge Remote-Checks aus und akzeptieren keine Konfiguration.
Im Folgendenen die Konfigurationen des Masters und eines Satelliten icinganodeA. IcinganodeB ist analog aufgebaut.
zones.conf auf dem Icingamaster:
|
Quellcode
|
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
|
object Endpoint "icingamaster" {
host = "..."
}
object Endpoint "client" {
host = "..."
}
object Endpoint "icinganodeA" {
host = "..."
}
object Endpoint "clientA" {
host = "..."
}
---------------------------------------------------
object Zone "ZoneMaster" {
endpoints = [ "icingamaster" ]
}
object Zone "ZoneA" {
endpoints = [ "icinganodeA" ]
}
object Zone "client" {
endpoints = [ "client" ]
parent = "icingamaster"
}
object Zone "clientA" {
endpoints = [ "clientA" ]
parent = "ZoneA"
}
---------------------------------------------------
object Zone "global-templates" {
global = true
}
|
auszugsweise zones.conf auf icinganodeA
|
Quellcode
|
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
|
object Endpoint "icingamaster" {
host = "..."
}
object Endpoint "icinganodeA" {
host = "..."
}
object Endpoint "clientA" {
host = "..."
}
object Zone "ZoneMaster" {
endpoints = [ "icingamaster" ]
}
object Zone "ZoneA" {
endpoints = [ "icinganodeA" ]
parent = "ZoneMaster"
}
object Zone "clientA" {
endpoints = [ "clientA" ]
parent = "ZoneA"
}
object Zone "global-templates" {
global = true
}
|
die zones.conf auf ClientA :
|
Quellcode
|
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
|
object Endpoint "icingamaster" {
host = "..."
}
object Endpoint "icinganodeA" {
host = "..."
}
object Endpoint "ClientA" {
host = "..."
}
object Zone "MasterZone" {
endpoints = [ "icingamaster" ]
}
object Zone "ZoneA" {
endpoints = [ "icinganodeA" ]
parent = "MasterZone"
}
object Zone "ClientA" {
endpoints = [ "ClientA" ]
parent = "ZoneA"
}
|
die api.conf auf icinganodeA:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
|
object ApiListener "api" {
cert_path = SysconfDir + "/icinga2/pki/" + NodeName + ".crt"
key_path = SysconfDir + "/icinga2/pki/" + NodeName + ".key"
ca_path = SysconfDir + "/icinga2/pki/ca.crt"
accept_config = true
ticket_salt = TicketSalt
}
|
die api.conf auf ClientA:
|
Quellcode
|
1
2
3
4
5
6
7
8
9
|
object ApiListener "api" {
cert_path = SysconfDir + "/icinga2/pki/" + NodeName + ".crt"
key_path = SysconfDir + "/icinga2/pki/" + NodeName + ".key"
ca_path = SysconfDir + "/icinga2/pki/ca.crt"
accept_config = false
accept_commands = true
ticket_salt = TicketSalt
}
|
die Host-Definition von clientA
|
Quellcode
|
1
2
3
4
5
6
|
object Host "clientA" {
display_name = "clientA-Displayname"
import "generic-host"
address = "..."
vars.remote_client = "1"
}
|
die Service-Definition für einen der Checks, der auf ClientA ausgeführt werden soll. Diese befindet sich in
der zone-Config der entsprechenden Zone auf dem icingamaster.
|
Quellcode
|
1
2
3
4
5
6
7
8
9
10
11
|
apply Service "apt" {
import "generic-service"
check_command = "apt"
if (host.vars.remote_client) {
command_endpoint = host.name
}
assign where host.vars.remote_client
}
|
Die Erstellung der Zertifikate gemäß der Doku hat geklappt und die resultierende Kommunikation MAster <-> Satelliten <-> Clients funktioniert soweit.
Meine Fragen generell sind:
- Ist die Konfiguration so umsetzbar, oder sind grobe Denkfehler drinnen? Ich ziele da vor allem auf die Parentbeziehungen in den einzelnen Zonen und die
Anwendung der Apply-Regel im Service..
- Der icingamaster meldet beim clustercheck ein Critical zurück, dass der clientA nicht verbunden ist. Ist dieses Verhalten zu erwarten? Rein intuitiv würde ich
sagen ja, da der ClientA nicht direkt vom icingamaster aus angesprochen werden kann.
- In dieser Konstellation müssen in allen drei Zonen (icingamaster, icinganodeA und ClientA) jeweils die zone.conf-Dateien angepasst werden. Ließe sich
eine Konfiguration basteln, in der man z.B nur im Master Einstellungen vornimmt? Wenn ja, was wäre hier der Ansatzpunkt, mir fehlt da noch ein wenig
das Verständnis. Wie könnte man es evtl. alternativ hinbekommen, die Beziehungen der einzelnen Endpoints abzubilden?
Ich bin über jede Korrektur der Config dankbar, eventuell können Teile der Konfiguration ja weggelassen werden?
Vielen Dank fürs Drüberschauen schon im Voraus.