net-mgmt/zabbix-proxy: copy with variants support

This commit is contained in:
Franco Fichtner
2021-05-31 17:53:31 +02:00
parent 179edb8eb2
commit fe11c45336
19 changed files with 808 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
PLUGIN_NAME= zabbix-proxy
PLUGIN_VERSION= 1.5
PLUGIN_COMMENT= Zabbix Proxy enables decentralized monitoring
PLUGIN_MAINTAINER= m.muenz@gmail.com
PLUGIN_VARIANTS= zabbix5 zabbix4
zabbix5_NAME= zabbix5-proxy
zabbix5_DEPENDS= zabbix5-proxy
zabbix4_NAME= zabbix4-proxy
zabbix4_DEPENDS= zabbix4-proxy
.include "../../Mk/plugins.mk"
+36
View File
@@ -0,0 +1,36 @@
Zabbix is an enterprise-class open source distributed monitoring solution.
Zabbix is software that monitors numerous parameters of a network and the
health and integrity of servers. Zabbix uses a flexible notification
mechanism that allows users to configure e-mail based alerts for virtually
any event. This allows a fast reaction to server problems. Zabbix offers
excellent reporting and data visualisation features based on the stored
data. This makes Zabbix ideal for capacity planning.
WWW: https://www.zabbix.com/
Plugin Changelog
----------------
1.5
* Add log file to web GUI (contributed by Starkstromkonsument)
1.4
* Allow setting ConfigFrequency
* Allow setting DataSenderFrequency
* Allow setting StartVMwareCollectors
1.3
* Switch to zabbix5-proxy
1.2
* Allow adding multiple listen addresses
1.1
* Add ProxyOfflineBuffer parameter
* Switch to new service control UI
@@ -0,0 +1,49 @@
<?php
/*
Copyright (C) 2017 Michael Muenz <m.muenz@gmail.com>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
function zabbixproxy_services()
{
global $config;
$services = array();
if (isset($config['OPNsense']['zabbixproxy']['general']['enabled']) && $config['OPNsense']['zabbixproxy']['general']['enabled'] == 1) {
$services[] = array(
'description' => gettext('Zabbix Proxy'),
'configd' => array(
'restart' => array('zabbixproxy restart'),
'start' => array('zabbixproxy start'),
'stop' => array('zabbixproxy stop'),
),
'name' => 'zabbixproxy',
'pidfile' => '/var/run/zabbix/zabbix_proxy.pid'
);
}
return $services;
}
@@ -0,0 +1,39 @@
<?php
/**
* Copyright (C) 2019 Michael Muenz <m.muenz@gmail.com>
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
namespace OPNsense\Zabbixproxy\Api;
use OPNsense\Base\ApiMutableModelControllerBase;
class GeneralController extends ApiMutableModelControllerBase
{
protected static $internalModelClass = '\OPNsense\Zabbixproxy\General';
protected static $internalModelName = 'general';
}
@@ -0,0 +1,47 @@
<?php
/**
* Copyright (C) 2019 Michael Muenz <m.muenz@gmail.com>
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
* AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*
*/
namespace OPNsense\Zabbixproxy\Api;
use OPNsense\Base\ApiMutableServiceControllerBase;
use OPNsense\Core\Backend;
use OPNsense\Zabbixproxy\General;
/**
* Class ServiceController
* @package OPNsense\Zabbixproxy
*/
class ServiceController extends ApiMutableServiceControllerBase
{
protected static $internalServiceClass = '\OPNsense\Zabbixproxy\General';
protected static $internalServiceTemplate = 'OPNsense/Zabbixproxy';
protected static $internalServiceEnabled = 'enabled';
protected static $internalServiceName = 'zabbixproxy';
}
@@ -0,0 +1,38 @@
<?php
/*
Copyright (C) 2019 Michael Muenz <m.muenz@gmail.com>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
namespace OPNsense\Zabbixproxy;
class GeneralController extends \OPNsense\Base\IndexController
{
public function indexAction()
{
$this->view->generalForm = $this->getForm("general");
$this->view->pick('OPNsense/Zabbixproxy/general');
}
}
@@ -0,0 +1,163 @@
<form>
<field>
<id>general.enabled</id>
<label>Enable</label>
<type>checkbox</type>
<help>This will activate the Zabbix Proxy service.</help>
</field>
<field>
<id>general.proxymode</id>
<label>Proxy Mode</label>
<type>checkbox</type>
<help>Active (default) or passive mode, only switch to passive if you know what you are doing.</help>
</field>
<field>
<id>general.server</id>
<label>Server</label>
<type>text</type>
<help>IP address or hostname of Zabbix server.</help>
</field>
<field>
<id>general.serverport</id>
<label>Server Port</label>
<type>text</type>
<help>Port of Zabbix trapper on Zabbix server. Default is fine for most scenarios.</help>
</field>
<field>
<id>general.hostname</id>
<label>Hostname</label>
<type>text</type>
<help>The name of this Zabbix instance. It has to match with the defined name in the central Zabbix server.</help>
</field>
<field>
<id>general.listenip</id>
<label>Listen IP</label>
<style>tokenize</style>
<type>select_multiple</type>
<allownew>true</allownew>
<help>List of comma delimited IP addresses that the trapper should listen on. Trapper will listen on all network interfaces if this parameter is missing.</help>
</field>
<field>
<id>general.listenport</id>
<label>Listen Port</label>
<type>text</type>
<help>Listen port for trapper. Default is just fine.</help>
</field>
<field>
<id>general.sourceip</id>
<label>Source IP</label>
<type>text</type>
<help>Source IP address for outgoing connections.</help>
</field>
<field>
<id>general.startpollers</id>
<label>Start Pollers</label>
<type>text</type>
<help>Number of pre-forked instances of pollers.</help>
</field>
<field>
<id>general.startipmipollers</id>
<label>Start IPMI Pollers</label>
<type>text</type>
<help>Number of pre-forked instances of IPMI pollers.</help>
</field>
<field>
<id>general.startpollersunreachable</id>
<label>Start Pollers Unreachable</label>
<type>text</type>
<help>Number of pre-forked instances of pollers for unreachable hosts (including IPMI and Java).</help>
</field>
<field>
<id>general.starttrappers</id>
<label>Start Trappers</label>
<type>text</type>
<help>Number of pre-forked instances of trappers. Trappers accept incoming connections from Zabbix sender and active agents.</help>
</field>
<field>
<id>general.startpingers</id>
<label>Start Pingers</label>
<type>text</type>
<help>Number of pre-forked instances of ICMP pingers.</help>
</field>
<field>
<id>general.startdiscoverers</id>
<label>Start Discoverers</label>
<type>text</type>
<help>Number of pre-forked instances of discoverers.</help>
</field>
<field>
<id>general.startvmwarecollectors</id>
<label>Start VMware Collectors</label>
<type>text</type>
<help>Number of pre-forked instances of VMware Collectors.</help>
</field>
<field>
<id>general.starthttppollers</id>
<label>Start HTTP Pollers</label>
<type>text</type>
<help>Number of pre-forked instances of HTTP pollers.</help>
</field>
<field>
<id>general.cachesize</id>
<label>Cache Size</label>
<type>text</type>
<help>Size of configuration cache, in bytes. Shared memory size, for storing hosts and items data. Range: 128K-8G</help>
</field>
<field>
<id>general.historycachesize</id>
<label>History Cache Size</label>
<type>text</type>
<help>Size of history cache in bytes. Shared memory size for storing history data. Range: 128K-2G</help>
</field>
<field>
<id>general.historyindexcachesize</id>
<label>History Index Cache Size</label>
<type>text</type>
<help>Size of history index cache in bytes. Shared memory size for indexing history cache. Range: 128K-2G</help>
</field>
<field>
<id>general.proxyofflinebuffer</id>
<label>Proxy Offline Buffer</label>
<type>text</type>
<help>Set the time in hours how long the values will be buffered when the server is unreachable.</help>
</field>
<field>
<id>general.timeout</id>
<label>Timeout</label>
<type>text</type>
<help>Specifies how long we wait for agent, SNMP device or external check (in seconds).</help>
</field>
<field>
<id>general.configfrequency</id>
<label>Config Frequency</label>
<type>text</type>
<help>Specifies the time how often proxy retrieves configuration data from zabbix server (in seconds).</help>
</field>
<field>
<id>general.datasenderfrequency</id>
<label>Data Sender Frequency</label>
<type>text</type>
<help>Specifies the time how often the proxy will send collected data to the server (in seconds).</help>
</field>
<field>
<id>general.encryption</id>
<label>PSK based encryption</label>
<type>checkbox</type>
<help>Enable PSK based encryption for communicating with the Zabbix server</help>
<advanced>true</advanced>
</field>
<field>
<id>general.encryptionidentity</id>
<label>PSK Identity</label>
<type>text</type>
<help>The PSK identity configured on the Zabbix server</help>
<advanced>true</advanced>
</field>
<field>
<id>general.encryptionpsk</id>
<label>PSK</label>
<type>text</type>
<help>The PSK configured on the Zabbix server</help>
<advanced>true</advanced>
</field>
</form>
@@ -0,0 +1,11 @@
<acl>
<page-services-zabbixproxy>
<name>Services: Zabbix Proxy</name>
<patterns>
<pattern>ui/zabbixproxy/*</pattern>
<pattern>api/zabbixproxy/*</pattern>
<pattern>ui/diagnostics/log/zabbix/zabbix_proxy/*</pattern>
<pattern>api/diagnostics/log/zabbix/zabbix_proxy/*</pattern>
</patterns>
</page-services-zabbixproxy>
</acl>
@@ -0,0 +1,35 @@
<?php
/*
Copyright (C) 2019 Michael Muenz <m.muenz@gmail.com>
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
*/
namespace OPNsense\Zabbixproxy;
use OPNsense\Base\BaseModel;
class General extends BaseModel
{
}
@@ -0,0 +1,116 @@
<model>
<mount>//OPNsense/zabbixproxy/general</mount>
<description>Zabbix Proxy configuration</description>
<version>2.0.2</version>
<items>
<enabled type="BooleanField">
<default>0</default>
<Required>Y</Required>
</enabled>
<proxymode type="BooleanField">
<default>0</default>
<Required>Y</Required>
</proxymode>
<server type="TextField">
<default></default>
<Required>N</Required>
</server>
<serverport type="TextField">
<default>10051</default>
<Required>N</Required>
</serverport>
<hostname type="TextField">
<default>Zabbix proxy</default>
<Required>Y</Required>
</hostname>
<listenport type="TextField">
<default>10051</default>
<Required>N</Required>
</listenport>
<listenip type="NetworkField">
<default></default>
<FieldSeparator>,</FieldSeparator>
<asList>Y</asList>
<Required>N</Required>
</listenip>
<sourceip type="NetworkField">
<default></default>
<Required>N</Required>
</sourceip>
<startpollers type="TextField">
<default>5</default>
<Required>N</Required>
</startpollers>
<startipmipollers type="IntegerField">
<default>0</default>
<Required>N</Required>
</startipmipollers>
<startpollersunreachable type="IntegerField">
<default>1</default>
<Required>N</Required>
</startpollersunreachable>
<starttrappers type="IntegerField">
<default>5</default>
<Required>N</Required>
</starttrappers>
<startpingers type="IntegerField">
<default>1</default>
<Required>N</Required>
</startpingers>
<startdiscoverers type="IntegerField">
<default>1</default>
<Required>N</Required>
</startdiscoverers>
<startvmwarecollectors type="IntegerField">
<Required>N</Required>
</startvmwarecollectors>
<starthttppollers type="IntegerField">
<default>1</default>
<Required>N</Required>
</starthttppollers>
<cachesize type="TextField">
<default>8M</default>
<Required>N</Required>
</cachesize>
<historycachesize type="TextField">
<default>16M</default>
<Required>N</Required>
</historycachesize>
<historyindexcachesize type="TextField">
<default>4M</default>
<Required>N</Required>
</historyindexcachesize>
<proxyofflinebuffer type="IntegerField">
<Required>N</Required>
<MinimumValue>1</MinimumValue>
<MaximumValue>720</MaximumValue>
<ValidationMessage>Set a number between 1 and 720.</ValidationMessage>
</proxyofflinebuffer>
<timeout type="IntegerField">
<default>4</default>
<Required>N</Required>
</timeout>
<configfrequency type="IntegerField">
<Required>N</Required>
</configfrequency>
<datasenderfrequency type="IntegerField">
<Required>N</Required>
</datasenderfrequency>
<encryption type="BooleanField">
<default>0</default>
<Required>Y</Required>
</encryption>
<encryptionidentity type="TextField">
<default></default>
<Required>N</Required>
<mask>/^.{1,128}$/</mask>
<ValidationMessage>Should be a string between 1 and 128 characters.</ValidationMessage>
</encryptionidentity>
<encryptionpsk type="TextField">
<default></default>
<Required>N</Required>
<mask>/^[A-Fa-f0-9]{32,512}$/</mask>
<ValidationMessage>Should be a hexadecimal string between 32 and 512 characters.</ValidationMessage>
</encryptionpsk>
</items>
</model>
@@ -0,0 +1,8 @@
<menu>
<Services>
<Zabbixproxy VisibleName="Zabbix Proxy" cssClass="fa fa-eye">
<Settings order="10" url="/ui/zabbixproxy/general/index"/>
<Log VisibleName="Log File" order="50" url="/ui/diagnostics/log/zabbix/zabbix_proxy"/>
</Zabbixproxy>
</Services>
</menu>
@@ -0,0 +1,60 @@
{#
OPNsense® is Copyright © 2014 2017 by Deciso B.V.
This file is Copyright © 2019 by Michael Muenz <m.muenz@gmail.com>
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED “AS IS” AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
#}
<div class="content-box" style="padding-bottom: 1.5em;">
{{ partial("layout_partials/base_form",['fields':generalForm,'id':'frm_general_settings'])}}
<div class="col-md-12">
<hr />
<button class="btn btn-primary" id="saveAct" type="button"><b>{{ lang._('Save') }}</b> <i id="saveAct_progress"></i></button>
</div>
</div>
<script>
$( document ).ready(function() {
var data_get_map = {'frm_general_settings':"/api/zabbixproxy/general/get"};
mapDataToFormUI(data_get_map).done(function(data){
formatTokenizersUI();
$('.selectpicker').selectpicker('refresh');
});
updateServiceControlUI('zabbixproxy');
// link save button to API set action
$("#saveAct").click(function(){
saveFormToEndpoint(url="/api/zabbixproxy/general/set", formid='frm_general_settings',callback_ok=function(){
$("#saveAct_progress").addClass("fa fa-spinner fa-pulse");
ajaxCall(url="/api/zabbixproxy/service/reconfigure", sendData={}, callback=function(data,status) {
ajaxCall(url="/api/zabbixproxy/service/status", sendData={}, callback=function(data,status) {
updateServiceControlUI('zabbixproxy');
});
$("#saveAct_progress").removeClass("fa fa-spinner fa-pulse");
});
});
});
});
</script>
@@ -0,0 +1,16 @@
#!/bin/sh
# Setup database directory
mkdir -p /var/db/zabbix
chown -R zabbix:zabbix /var/db/zabbix
chmod 755 /var/db/zabbix
# Setup logging
mkdir /var/log/zabbix
chown -R zabbix:zabbix /var/log/zabbix
chmod 770 /var/log/zabbix
# Setup PID directory
mkdir -p /var/run/zabbix
chown -R zabbix:zabbix /var/run/zabbix
chmod 755 /var/run/zabbix
@@ -0,0 +1,55 @@
"""
Copyright (c) 2020 Ad Schellevis <ad@opnsense.org>
Copyright (C) 2020 Starkstromkonsument
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
"""
import re
import datetime
from . import BaseLogFormat
zabbix_timeformat = r'(\d*):(\d{4}\d{2}\d{2}:\d{2}\d{2}\d{2})\.\d{3}\s(.*)'
class ZabbixLogFormat(BaseLogFormat):
def __init__(self, filename):
super(ZabbixLogFormat, self).__init__(filename)
self._priority = 100
def match(self, line):
return self._filename.find('zabbix_proxy') > -1 and re.match(zabbix_timeformat, line) is not None
@staticmethod
def timestamp(line):
tmp = re.match(zabbix_timeformat, line)
grp = tmp.group(2)
return datetime.datetime.strptime(grp, "%Y%m%d:%H%M%S").isoformat()
@staticmethod
def process_name(line):
tmp = re.match(zabbix_timeformat, line)
return tmp.group(1)
@staticmethod
def line(line):
tmp = re.match(zabbix_timeformat, line)
return tmp.group(3)
@@ -0,0 +1,23 @@
[start]
command:/usr/local/opnsense/scripts/OPNsense/Zabbixproxy/setup.sh;/usr/local/etc/rc.d/zabbix_proxy start
parameters:
type:script
message:starting Zabbix Proxy
[stop]
command:/usr/local/etc/rc.d/zabbix_proxy stop; exit 0
parameters:
type:script
message:stopping Zabbix Proxy
[restart]
command:/usr/local/opnsense/scripts/OPNsense/Zabbixproxy/setup.sh;/usr/local/etc/rc.d/zabbix_proxy restart
parameters:
type:script
message:restarting Zabbix Proxy
[status]
command:/usr/local/etc/rc.d/zabbix_proxy status;exit 0
parameters:
type:script_output
message:request Zabbix Proxy status
@@ -0,0 +1,3 @@
zabbix_proxy:/etc/rc.conf.d/zabbix_proxy
zabbix_proxy.conf:/usr/local/etc/zabbix5/zabbix_proxy.conf
zabbix_proxy.psk:/usr/local/etc/zabbix5/zabbix_proxy.psk
@@ -0,0 +1,6 @@
{% if helpers.exists('OPNsense.zabbixproxy.general.enabled') and OPNsense.zabbixproxy.general.enabled == '1' %}
zabbix_proxy_var_script="/usr/local/opnsense/scripts/OPNsense/Zabbixproxy/setup.sh"
zabbix_proxy_enable="YES"
{% else %}
zabbix_proxy_enable="NO"
{% endif %}
@@ -0,0 +1,85 @@
{% if helpers.exists('OPNsense.zabbixproxy.general.enabled') and OPNsense.zabbixproxy.general.enabled == '1' %}
{% if helpers.exists('OPNsense.zabbixproxy.general.proxymode') and OPNsense.zabbixproxy.general.proxymode == '1' %}
ProxyMode=1
{% else %}
ProxyMode=0
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.server') and OPNsense.zabbixproxy.general.server != '' %}
Server={{ OPNsense.zabbixproxy.general.server }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.serverport') and OPNsense.zabbixproxy.general.serverport != '' %}
ServerPort={{ OPNsense.zabbixproxy.general.serverport }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.hostname') and OPNsense.zabbixproxy.general.hostname != '' %}
Hostname={{ OPNsense.zabbixproxy.general.hostname }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.listenport') and OPNsense.zabbixproxy.general.listenport != '' %}
ListenPort={{ OPNsense.zabbixproxy.general.listenport }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.sourceip') and OPNsense.zabbixproxy.general.sourceip != '' %}
SourceIP={{ OPNsense.zabbixproxy.general.sourceip }}
{% endif %}
LogFile=/var/log/zabbix/zabbix_proxy.log
PidFile=/var/run/zabbix/zabbix_proxy.pid
DBName=/var/db/zabbix/zabbix_proxy.db
{% if helpers.exists('OPNsense.zabbixproxy.general.proxyofflinebuffer') and OPNsense.zabbixproxy.general.proxyofflinebuffer != '' %}
ProxyOfflineBuffer={{ OPNsense.zabbixproxy.general.proxyofflinebuffer }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.configfrequency') and OPNsense.zabbixproxy.general.configfrequency != '' %}
ConfigFrequency={{ OPNsense.zabbixproxy.general.configfrequency }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.datasenderfrequency') and OPNsense.zabbixproxy.general.datasenderfrequency != '' %}
DataSenderFrequency={{ OPNsense.zabbixproxy.general.datasenderfrequency }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.startpollers') and OPNsense.zabbixproxy.general.startpollers != '' %}
StartPollers={{ OPNsense.zabbixproxy.general.startpollers }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.startipmipollers') and OPNsense.zabbixproxy.general.startipmipollers != '' %}
StartIPMIPollers={{ OPNsense.zabbixproxy.general.startipmipollers }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.startpollersunreachable') and OPNsense.zabbixproxy.general.startpollersunreachable != '' %}
StartPollersUnreachable={{ OPNsense.zabbixproxy.general.startpollersunreachable }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.starttrappers') and OPNsense.zabbixproxy.general.starttrappers != '' %}
StartTrappers={{ OPNsense.zabbixproxy.general.starttrappers }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.startpingers') and OPNsense.zabbixproxy.general.startpingers != '' %}
StartPingers={{ OPNsense.zabbixproxy.general.startpingers }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.startdiscoverers') and OPNsense.zabbixproxy.general.startdiscoverers != '' %}
StartDiscoverers={{ OPNsense.zabbixproxy.general.startdiscoverers }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.startvmwarecollectors') and OPNsense.zabbixproxy.general.startvmwarecollectors != '' %}
StartVMwareCollectors={{ OPNsense.zabbixproxy.general.startvmwarecollectors }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.starthttppollers') and OPNsense.zabbixproxy.general.starthttppollers != '' %}
StartHTTPPollers={{ OPNsense.zabbixproxy.general.starthttppollers }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.listenip') and OPNsense.zabbixproxy.general.listenip != '' %}
ListenIP={{ OPNsense.zabbixproxy.general.listenip }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.cachesize') and OPNsense.zabbixproxy.general.cachesize != '' %}
CacheSize={{ OPNsense.zabbixproxy.general.cachesize }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.historycachesize') and OPNsense.zabbixproxy.general.historycachesize != '' %}
HistoryCacheSize={{ OPNsense.zabbixproxy.general.historycachesize }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.historyindexcachesize') and OPNsense.zabbixproxy.general.historyindexcachesize != '' %}
HistoryIndexCacheSize={{ OPNsense.zabbixproxy.general.historyindexcachesize }}
{% endif %}
{% if helpers.exists('OPNsense.zabbixproxy.general.timeout') and OPNsense.zabbixproxy.general.timeout != '' %}
Timeout={{ OPNsense.zabbixproxy.general.timeout }}
{% endif %}
FpingLocation=/usr/local/sbin/fping
Fping6Location=/usr/local/sbin/fping6
{% if helpers.exists('OPNsense.zabbixproxy.general.encryption') and OPNsense.zabbixproxy.general.encryption == '1' %}
{% if helpers.exists('OPNsense.zabbixproxy.general.proxymode') and OPNsense.zabbixproxy.general.proxymode == '1' %}
TLSAccept=psk
{% else %}
TLSConnect=psk
{% endif %}
TLSPSKFile=/usr/local/etc/zabbix5/zabbix_proxy.psk
TLSPSKIdentity={{ OPNsense.zabbixproxy.general.encryptionidentity }}
{% endif %}
{% endif %}
@@ -0,0 +1,5 @@
{% if helpers.exists('OPNsense.zabbixproxy.general.enabled') and OPNsense.zabbixproxy.general.enabled == '1' %}
{% if helpers.exists('OPNsense.zabbixproxy.general.encryption') and OPNsense.zabbixproxy.general.encryption == '1' %}
{{ OPNsense.zabbixproxy.general.encryptionpsk }}
{% endif %}
{% endif %}