Zabbix Agent 2 asennus Ubuntuun (Zabbixin omasta reposta)

Käytä aina Zabbixin omaa repositorya. Ubuntun omissa paketeissa agentti on usein vanhentunut eikä vastaa Zabbix-serverin versiota.

1) Tarkista Ubuntun versio

lsb_release -a

Tarvitset tästä Release-tiedon (esim. 22.04 tai 24.04).


2) Lataa Zabbixin repository-paketti

Avaa lataussivu: https://www.zabbix.com/download
Valitse:

  • Zabbix version = sama kuin serverillä (esim. 7.0 LTS)
  • OS = Ubuntu
  • OS version = edellisessä kohdassa selvitetty
  • Component = Agent 2

Sivu antaa sinulle valmiit komennot. Esimerkki:

Esimerkki: Ubuntu 24.04 + Zabbix 7.0

sudo -s
wget https://repo.zabbix.com/zabbix/7.0/ubuntu/pool/main/z/zabbix-release/zabbix-release_latest_7.0+ubuntu24.04_all.deb
dpkg -i zabbix-release_latest_7.0+ubuntu24.04_all.deb
apt update

Huomaa: vaihda URL vastaamaan sinun Ubuntu-versiotasi.


3) Asenna Zabbix Agent 2

apt install zabbix-agent2

4) Muokkaa agentin konfiguraatio

nano /etc/zabbix/zabbix_agent2.conf

Muuta vähintään seuraavat rivit:

Server=ZABBIX_SERVER_IP
ServerActive=ZABBIX_SERVER_IP
Hostname=UBUNTU_HOSTNAME

Selitykset:

  • Server = Zabbix serverin IP, jolta passiiviset tarkistukset sallitaan
  • ServerActive = Zabbix serverin IP, jonne agentti ottaa itse yhteyden
  • Hostname = täsmälleen sama nimi kuin Zabbixissa määritellyllä hostilla

5) Käynnistä ja ota palvelu käyttöön

systemctl enable zabbix-agent2
systemctl restart zabbix-agent2
systemctl status zabbix-agent2

Varmista että status on active (running).


6) Avaa palomuuri (UFW) portille 10050

Tarkista ensin onko UFW käytössä:

ufw status

Jos active, avaa portti:

ufw allow 10050/tcp

Suositus (turvallisempi): salli vain Zabbix-serveriltä

ufw allow from ZABBIX_SERVER_IP to any port 10050 proto tcp

7) Testaa yhteys Zabbix-serveriltä

Aja Zabbix-serverillä:

zabbix_get -s UBUNTU_IP -k agent.ping

Jos saat vastauksen:

1

yhteys toimii.


8) Lisää host Zabbixiin

Zabbix GUI → Add host

  • Agent interface = Ubuntu-palvelimen IP
  • Template = Linux by Zabbix agent

Yleisimmät ongelmat

OireSyy
“Get value from agent failed”Hostname ei täsmää
Ei yhteyttäUFW blokkaa portin
Agent running mutta ei dataaServer/ServerActive väärin

Miksi Firefox ei enää ole hyvä Wayland-kioski

Firefox Waylandissa:

  • toimii vain, jos se käynnistyy aktiivisessa käyttäjäsessiossa
  • ei siedä hyvin:
    • GDM autologinia
    • Snap-sandboxia
    • ei-interaktiivista käynnistystä
  • kioski-flag (--kiosk) toimii, mutta Wayland backend ei aina aktivoidu oikein Snapissa

–> Käytä Chromiumia Firefoxin sijaan

ESPHome

ESPHome on avoimen lähdekoodin projekti, jonka avulla on helppoa ohjelmoida ESP8266- ja ESP32-mikrokontrollereita käytettäväksi älykodin laitteina Home Assistantin kanssa: https://esphome.io

Keskeiset ominaisuudet

  • Käyttää YAML-muotoista määritystiedostoa laitteen toiminnan määrittelyyn
  • Tukee satoja antureita, releitä, näyttöjä, LED-nauhoja ym.
  • Mahdollistaa Wi-Fi-yhteyden ja MQTT- tai API-integraation
  • Tukee automaattista OTA (Over-The-Air) -päivitystä

Tyypilliset käyttökohteet

  • Lämpötila- ja kosteusmittarit (esim. DHT22)
  • Liikeilmaisimet, painikkeet, ovianturit
  • LED-ohjaus (WS2812, PWM, jne.)
  • Releohjaus, kuten valaistus tai sähkölaitteet

ESPHome tekee laitteista käytännössä Home Assistant -yhteensopivia plug-and-play-komponentteja ilman tarvetta kirjoittaa C/C++-koodia.

ESP mikrokontrollerin alustus

Kun ESPHome lisäosa on asennettu Home assistant:iin on uuden mikrokontrollerin alustus mahdollista tehdä suoraan Home Assistantista ”+ NEW DEVICE” nappulasta käyttäen Chromeen perustuvaa selainta.

Em. menetelmä toimii ainoastaan jos selain käynnistetään koneella, jolle Home Assistant on asennettu tai jos selainyhteys Home Assitant palveluun käyttää https-protokollaa.

Koska HA (Home Assistant) oletuksena asentuu käyttämään porttia 8123 ja http-protokollaa, alustan mikrokontrollerin käyttäen https://web.esphome.io/?dashboard_wizard palvelua.

ESPHome Dashboard Wizard

Avaa Chrome selaimella (tai Chromeen perustuvalla selaimella) osoite: https://web.esphome.io/?dashboard_wizard

Kytke ESP mikrokontrolleri USB kaapelilla tietokoneeseesi ja paina ”CONNECT” linkkiä. Tämän jälkeen sinulta kysytään mihin sarjaporttiin mikrokontrolleri on kytketty. Listan loppupuolelta pitäisi löytyä ”USB Serial (ttyUSBo)” valinta tai saman kaltaista.

Valitse ja paina ”Connect”. Tämän jälkeen valitse avautuvasta ikkunasta ”Prepare for first use”.

Valitse ”INSTALL”

Jos saat tämän jälkeen virheilmoituksen ”An error occurred. Improv Wi-Fi Serial not detected”, kokeile valita kolmen pisteen valikosta ”Configure WI-FI”.

Valitse ”CONNECT TO WI-FI”, jonka jälkeen voit tehdä tarvittavat asetukset.

Valitse ”CONNECT”.

Provisioinnin jälkeen paina ”CLOSE” ja irroita mikrokontrolleri hetkeksi USB kaapelista. Käynnistyttyään kontrolleri hakee itselleen IP-osoitteen WIFI-verkosta.

pfSense palomuurikone on tässä tapauksessa antanut mikrokontrollerille dynaamisen IP-osoitteen 192.168.2.125. Muutan osoitteen staattiseksi, jotta se ei vahingossa muutu myöhemmin joksikin toiseksi.

Kontrollerin liittäminen Home Assistant:iin

Valitse ”Settings” -> ”Devices & Services” -> ”ESPHome” -> ”ADD DEVICE”

Kirjoita kohtaan ”Host” aiemmin määrittämäsi staattinen IP-osoite. Tämän jälkeen voit antaa laitteelle nimen ja sen sijainnin.

Siirry ”ESPHome Builder” sivulle ja valitse ”+NEW DEVICE”

Valitse ”Continue” ja anna tämän jälkeen nimi luotavalle laitteelle.

Valitse käytettävän mikrokontrollerin tyyppi.

Lopuksi valitse ”Skip” koska laitetta ei ole kytketty USB-kaapelilla tietokoneeseen.

Nyt sinulla on ”ESPHome Builder” näkymässä laite, joka pitää vielä liittää aiemmin määrittämääsi laitteeseen.

Valitse ”EDIT” ja muokkaa avautuvaa koodia niin, että se sisältää tarvittavat yhteysasetukset jne.

esphome:
  name: weather-station
  friendly_name: weather-station

esp8266:
  board: esp01_1m

# Enable logging
logger:
    level: DEBUG

# Enable Home Assistant API
api:
   encryption:
     key: !secret api_encryption_key

ota:
  - platform: esphome
    # safe_mode: True
    password: !secret ota_password

wifi:
   networks:
     - ssid: !secret wifi_tv_room_ssid
       password: !secret wifi_password
     - ssid: !secret wifi_ssid
       password: !secret wifi_password
     - ssid: !secret wifi_garage_ssid
       password: !secret wifi_password
   manual_ip:
     static_ip: 192.168.2.96
     gateway: 192.168.2.1
     subnet: 255.255.255.0
   ap:
     ssid: "weather-station"
     password: "changemenow"

captive_portal:

Tämä jälkeen valise ”INSTALL”, jonka jälkeen koodi buildataan ja asennetaan laitteelle.

Tämän jälkeen laitteen tila muuttuu ”ONLINE:ksi”.

Tämän jälkeen alkaa varsinainen ohjelmistokehitys, josta kerron lisää sääasema-projektissa.

Kioskinäytön käynnistys webbikameran avulla

Ohjaan Home Assistant kodinohjausjärjestelmää keittiössä sijaitsevalla kosketusnäytöllisellä tietokoneella, jossa on Ubuntu 24 LTS käyttöjärjetelmä ja Firefox selain kioskimoodissa.

Koska haluan näytön olevan sammutettuna sillon kun kukaan ei ole sitä katsomassa, pimennetään se kun näytön webbikamera ei ole nähnyt liikettä puoleen tuntiin.

Tämä onnistuu käyttämällä ”motion” lisäosaa, jonka saa asennettua Ubuntuun komennolla ”sudo apt install motion”. Tämän jälkeen konfiguroidaan motion: ”sudo nano /etc/motion/motion.conf”

# Rename this distribution example file to motion.conf
#
# This config file was generated by motion 4.6.0
# Documentation:  /usr/share/doc/motion/motion_guide.html
#
# This file contains only the basic configuration options to get a
# system working.  There are many more options available.  Please
# consult the documentation for the complete list of all options.
#

############################################################
# System control configuration parameters
############################################################

# Start in daemon (background) mode and release terminal.
daemon off

# Start in Setup-Mode, daemon disabled.
setup_mode off

# File to store the process ID.
; pid_file value

# File to write logs messages into.  If not defined stderr and syslog is used.
log_file /var/log/motion/motion.log

# Level of log messages [1..9] (EMG, ALR, CRT, ERR, WRN, NTC, INF, DBG, ALL).
log_level 6

# Target directory for pictures, snapshots and movies
target_dir /var/lib/motion

# Video device (e.g. /dev/video0) to be used for capturing.
video_device /dev/video0

# Parameters to control video device.  See motion_guide.html
; video_params value

# The full URL of the network camera stream.
; netcam_url value

# Name of mmal camera (e.g. vc.ril.camera for pi camera).
; mmalcam_name value

# Camera control parameters (see raspivid/raspistill tool documentation)
; mmalcam_params value

############################################################
# Image Processing configuration parameters
############################################################

# Image width in pixels.
width 640

# Image height in pixels.
height 480

# Maximum number of frames to be captured per second.
framerate 15

# Text to be overlayed in the lower left corner of images
text_left CAMERA1

# Text to be overlayed in the lower right corner of images.
text_right %Y-%m-%d\n%T-%q

############################################################
# Motion detection configuration parameters
############################################################


# Always save pictures and movies even if there was no motion.
emulate_motion off

# Threshold for number of changed pixels that triggers motion.
threshold 1500

# Noise threshold for the motion detection.
; noise_level 32

# Despeckle the image using (E/e)rode or (D/d)ilate or (l)abel.
despeckle_filter EedDl

# Number of images that must contain motion to trigger an event.
minimum_motion_frames 1

# Gap in seconds of no motion detected that triggers the end of an event.
event_gap 60

# The number of pre-captured (buffered) pictures from before motion.
pre_capture 3

# Number of frames to capture after motion is no longer detected.
post_capture 0

############################################################
# Script execution configuration parameters
############################################################

# Command to be executed when an event starts.
on_event_start ydotool key 65

# Command to be executed when an event ends.
; on_event_end

# Command to be executed when a movie file is closed.
; on_movie_end value

############################################################
# Picture output configuration parameters
############################################################

# Output pictures when motion is detected
picture_output off

# File name(without extension) for pictures relative to target directory
picture_filename %Y%m%d%H%M%S-%q

############################################################
# Movie output configuration parameters
############################################################

# Create movies of motion events.
movie_output off

# Maximum length of movie in seconds.
movie_max_time 60

# The encoding quality of the movie. (0=use bitrate. 1=worst quality, 100=best)
movie_quality 45

# Container/Codec to used for the movie. See motion_guide.html
movie_codec mkv

# File name(without extension) for movies relative to target directory
movie_filename %t-%v-%Y%m%d%H%M%S

############################################################
# Webcontrol configuration parameters
############################################################

# Port number used for the webcontrol.
webcontrol_port 8080

# Restrict webcontrol connections to the localhost.
webcontrol_localhost on

# Type of configuration options to allow via the webcontrol.
webcontrol_parms 0

############################################################
# Live stream configuration parameters
############################################################

# The port number for the live stream.
stream_port 8081

# Restrict stream connections to the localhost.
stream_localhost off

##############################################################
# Camera config files - One for each camera.
##############################################################

; camera /usr/etc/motion/camera1.conf
; camera /usr/etc/motion/camera2.conf
; camera /usr/etc/motion/camera3.conf
; camera /usr/etc/motion/camera4.conf

##############################################################
# Directory to read '.conf' files for cameras.
##############################################################
; camera_dir /usr/etc/motion/conf.d

Konfiguroinnin jälkeen aktivoi ja käynnistä motion palvelu:
– systemctl enable motion
– systemctl start motion

Motion palvelun unit tiedosto:

[Unit]
Description=Motion detection video capture daemon
Documentation=man:motion(1)

[Service]
Type=simple
User=root
ExecStart=/usr/bin/motion -n

[Install]
WantedBy=multi-user.target

Tämän jälkeen asenna ydotool: sudo yum install ydotool

Motion palvelun konfiguraation määritys
# Command to be executed when an event starts.
on_event_start ydotool key 65

aiheuttaa välilyöntinäppäimen painalluksen webbikameran havaitessa liikettä.

Raspberry Pi:n boottaaminen verkkolevyltä

Firmwaren päivitys

root@r4-02:/home/kilpiju1# rpi-update

Aktivoi PXE boot

Sarjanumero

root@R4-01:/nfs/root# cat /proc/cpuinfo | grep Serial | awk -F ’: ’ ’{print $2}’ | tail -c 9

Lisää NFS jaot

proc            /proc           proc    defaults          0       0
PARTUUID=6c76e89e-01  /boot           vfat    defaults          0       2
PARTUUID=6c76e89e-02  /               ext4    defaults,noatime  0       1
# a swapfile is not a swap partition, no line here
#   use  dphys-swapfile swap[on|off]  for that

192.168.1.89:/mnt/Data/raspberry/rpi-pxe /nfs/root nfs defaults 0 0
192.168.1.89:/mnt/Data/raspberry/rpi-tftpboot /nfs/boot nfs defaults 0 0

Zigbee2MQTT ja Proxmox

Aiemmin ohjasin kaikki Zigbee-laitteitani yhdellä koordinaattorilla, mistä aiheutui ongelmia kun Zigbee laitteita oli paljon (~200). Aika ajoin laitteet putosivat Zigbee verkosta tai viestin kulussa oli useiden sekuntien viiveitä. En saanut selvitettyä juurisyytä ongelmiin, mutta hypoteeseina oli:

  • Koordinaattorin tilataulukolle varattu muisti loppui kesken
  • Joku zigbee silmukkaverkon (mesh network) reitittimistä (router) oli pullonkaula liikenteelle
  • Suuri laitteiden määrä samalla taajuudella aiheutti kilpatilanteita

Lopulta päädyin jakamaan yhden suuren verkon neljään pienempään joissa kussakin on 40-60 laitetta ja kullakin verkolla on käytössä oma kanava (kts. artikkeli ”Home Assistant – Zigbee verkon optimointi”)

Koska Home Assistant tukee ilman kikkailua, vain yhtä sisäistä Zigbee2MQTT siltaa, päädyin käyttämään Home Assistantin ulkopuolisia Zigbee2MQTT siltoja. Koska Home Assistant instanssini on virtuaalikone Proxmoxissa, oli helppoa luoda kullekin Zigbee2MQTT:lle oma Proxmox LXC kontti käyttäen valmista Proxmox VE Helper-Scriptiä (https://github.com/community-scripts/ProxmoxVE).

Zigbee2MQTT Proxmox LXC kontin asentaminen

  • Avaa Proxmoxin hallintasivu ja avaa Shell
  • Kirjoita komentoriville: bash -c ”$(wget -qLO – https://github.com/community-scripts/ProxmoxVE/raw/main/ct/zigbee2mqtt.sh)”

  • Valitse
    • ”Advanced Settings”
    • ”Debian”
    • ”Bookworm”
    • ”Privileged”
  • Aseta
    • Rootin salasana
    • Kontin ID
    • Hostin nimi
    • Levytilan koko (4GB)
    • Ytimien lukumäärä (2 kpl)
    • RAM (1024MB)
    • Silta (wmbr0)
    • Staattinen IP tai dhcp (dhcp)
    • APT-Cacher (jätä tyhjäksi)
    • Disabloi IPv6 (minulla ei ole IPv6:tta käytössä kotiverkoissa)
    • MTU size (jätä tyhjäksi)
    • DNS Search Domain (jätä tyhjäksi)
    • DNS Server IP (jätä tyhjäksi)
    • MAC (jätä tyhjäksi eli käytä proxmoxin arpomaa MAC:iä)
    • VLAN (jätä tyhjäksi, virtuaalilaneja ei ole kotiverkossani käytössä)
    • Custom tags (jätä oletukset)
    • Salli rootin ssh (Ei)
    • Verbose mode (Ei)

Kun konsolissa lukee ”Completed Succesfully”, voidaan siirtyä kontin konfigurointiin. Jos et ole asettanut kontille, kiinteää ip-osoitetta, vaan käytät DHCP-palvelua, kannattaa DHCP:hen määrittää staattinen ip-osoite. Tässä tapauksessa uusi kontti sai palomuurin DHCP palvelusta dynaamisen ip-osoitteen 192.168.100. Muuta osoite kiinteäksi DHCP-palvelussa ja reboottaa kontti (Huom! Älä reboottaa vhostia!), jolloin staattinen ip-osoite haetaan DHCP-palvelusta.

Kontin konfigurointi

Jos Zigbee-dongle oli liitettynä, kun asensit Zigbee2MQTT:n, ja LXC-kontti luotiin privilegoituna (privileged), skripti määrittää automaattisesti USB-läpiviennin kontille. Varmistaaksesi tämän ja selvittääksesi donglen sarjanumeron, avaa Proxmoxin shell ja anna seuraava komento:

ls -l /dev/serial/by-id

usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_bcf4367f48b6ed11afa1de0ea8669f5d-if00-port0 -> ../../ttyUSB1
usb-Silicon_Labs_Sonoff_Zigbee_3.0_USB_Dongle_Plus_0001-if00-port0 -> ../../ttyUSB0

Tuloksesta nähdään, että Proxmox palvelimeen on kytkettynä kaksi USB koordinaattoria. Näiden lisäksi minulla on käytössä vielä kaksi SMLIGHT SLZB-06 koordinaattoria lähiverkossa. Näiden konfiguroinnista myöhemmin lisää.

Avaa äsken luodun kontin konsoli

ja avaa editoriin /opt/zigbee2mqtt/data/configuration.yaml tiedosto. Lisää/muuta tiedostoon punaisella korostetut kohdat.

version: 4
homeassistant:
enabled: tue
permit_join: false

frontend:
enabled: true
port: 8080 #Zigbee2MQTT hallintasivun portti

mqtt:
base_topic: zigbee2mqtt_garage #Anna kullekin Zigbee2MQTT instanssille oma base topic
server: mqtt://192.168.1.3:1883 #Homeassistant serverin ip ja MQTT palvelun portti
user: mqtt_user #Homeassistantin MQTT käyttäjätunnus
password: salasana #MQTT salasana
keepalive: 60
reject_unauthorized: true
version: 4

serial:
adapter: zstack
port: /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_bcf4367f48b6ed11afa1de0ea8669f5d-if00-port0
advanced:
pan_id: GENERATE
network_key: GENERATE
channel: 25 #Valitse kullekin koordinaattorille oma kanava

Käynnistä Zigbee2MQTT komennolla:
[root]# cd /opt/zigbee2mqtt && npm start

IKEAn laitteet ja Zigbee2MQTT

Vanhemmat IKEAn Zigbee laitteet, kuten langattomat kytkimet, saattavat lakata toimimasta kun Zigbee2MQTT päivitetään versioon 2.0.

Avaa Zigbee2MQTT:sta ”Settings”.

Zigbee2MQTT:n päivittäminen versiosta 1.xx versioon 2.0 kun käytössä koordinaattori, joka käyttää Texas Instrumentsin Z-Stack piirisarjaa

Ajan Zigbee2MQTT:tä Proxmoxissa LXC konttina, joka on luotu käyttäen Proxmox VE Helper-Scriptiä: https://community-scripts.github.io/ProxmoxVE/scripts?id=zigbee2mqtt

Ennen päivitystä ota varmuuskopio Zigbee koordinaattorin muistista.

Tämän jälkeen ”Backup” ja ”Download backup”.

Tämän jälkeen sammuta kontti Proxmoxissa ja ota siitä snapshot.

Tämän jälkeen käynnistä kontti uudelleen.

Päivittäminen tapahtuu avaamalla Proxmoxista konsoli ko. konttiin ja ajamalla /opt/zigbee2mqtt hakemistossa update.sh skripti.

Ennen skriptin ajoa siirrä konfiguraatiotiedosto talteen /tmp hakemistoon, sillä päivitys kaatuu koska konfiguraatiotiedosto on erilainen kuin mitä GITistä löytyy:
[root]# mv /opt/zigbee2mqtt/data/configuration.yaml /tmp

Aja päivitys:
[root]# cd /opt/zigbee2mqtt
[root]# ./update.sh

Koska update tulee kaatumaan virheeseen puuttuvasta npm:stä ja pnpm:stä, aja seuraavat komennot:
[root]# npm install
[root]# npm install -g pnpm

Tämän jälkeen aja päivitys:
[root]# ./update.sh

Tämän jälkeen kopioi configuration.yaml /tmp hakemistosta takaisin data hakemistoon ja poista data/configuration.example.yaml.

Etsi koguraatiotiedostosta kohta serial: ja lisää adapter: zstack:
serial:
adapter: zstack
port: /dev/serial/by-id/usb-ITead_Sonoff_Zigbee_3.0_USB_Dongle_Plus_bcf4367f48b6ed11afa1de0ea8669f5d-if00-port0

adapter: zstack: Käytettävä Zigbee-adapteri on Texas Instrumentsin Z-Stack (yleistä esimerkiksi Sonoff Zigbee -tikuille).

Reboottaa kontti.

NodeRedin persistentit muuttujat

Oletusarvoisesti NodeRed pitää muuttujien arvot muistissa, joten jos NodeRed tai Home Assistant käynnistetään uudestaan, menetetään muuttujien arvot. Konfiguraatiomuutoksella voidaan muuttujien arvoja säilöä myös levylle, jolloin niiden arvot säilyvät restartin ylitse.

Home Assistantin NodeRed lisäosan konfiguraatiotiedosto löytyy polusta /root/addon_configs/a0d7b954_nodered/config.js. Ko. tiedoston editointi on helpointa käyttäen Home Assistantin lisäosaa (Add On) ”Advanced SSH & Web Terminal” ja käyttöjärjestelmän nano editoria.

Kun tiedosto on auki nano editorissa, siirry tiedoston loppuun kohtaan ennen lokimäärityksiä ja lisää seuraava määritys:

contextStorage: {
storeInFile: { module: ”localfilesystem”},
memoryOnly: { module: ”memory”},
default: ”memoryOnly”
},

Muutosten tallenuksen jälkeen reboottaa Home Assistant ja tämän jälkeen voit valita NodeRedissä esim. ”Change Node:ssa” mitä säilytyspaikkaa muuttujien arvoille käytetään.

Muuttujien arvot tallennetaan tiedostoon /root/addon_configs/a0d7b954_nodered/context/32cad8539d872c2e/flow.json esim. näin:

{
”harmo_finishing_time”: ”07:00:00”
}

Home Assistant Supervisor virheilmoitus konsolissa

Jos Supervisor ei käynnisty bootissa, vaan saat esim. seuraavanlaisen virheilmoituksen:”Supervisor: System is not ready with state: setup”, aja supervisorin korjausajo ja restartti.

ha > supervisor repair

ha > supervisor restart