diff --git a/zabbix/Makefile b/zabbix/Makefile new file mode 100644 index 0000000..2c47f81 --- /dev/null +++ b/zabbix/Makefile @@ -0,0 +1,5 @@ +all: main.c getdata.c + gcc -v -O2 main.c getdata.c -o zabbix_data +install: zabbix_data + cp zabbix_data /usr/local/bin + diff --git a/zabbix/README.md b/zabbix/README.md new file mode 100644 index 0000000..e7e40f0 --- /dev/null +++ b/zabbix/README.md @@ -0,0 +1,10 @@ +Это минимальный пакет для мониторинга extFilter через файл /var/run/extFilter_stat в zabbix. +Установка: +make && make install +Необходимо также установить zabbix-agent. + +Затем добавить в файл /etc/zabbix/zabbix_agent.conf строку +UserParameter=extfilter.stat[*],zabbix_data $1 +и перезапустить сервис агента. + +Затем импорти ровать шаблон через WEB-интерфейс. \ No newline at end of file diff --git a/zabbix/getdata.c b/zabbix/getdata.c new file mode 100644 index 0000000..b23b2b2 --- /dev/null +++ b/zabbix/getdata.c @@ -0,0 +1,32 @@ +#include +#include +char* trimall(char* s){ + char *temp=malloc(255); + memset(temp,0,sizeof(temp)); + int i=0,j=0; + char c; + while( (c=*(s+i))!= 0){ + if(!isspace(c)){ + *(temp+j)=c; + j++; + } + i++; + } + return temp; +} +char* getparam(char *s){ + char *temp=malloc(255),*c; + memset(temp,0,sizeof(temp)); + if((c=strchr(s,'='))!=NULL){ + strncpy(temp,s,c-s); + } + return temp; +} +char* getvalue(char *s){ + char *temp=malloc(255),*c; + memset(temp,0,sizeof(temp)); + if((c=strchr(s,'='))!=NULL){ + strcpy(temp,(c+1)); + } + return temp; +} diff --git a/zabbix/getdata.h b/zabbix/getdata.h new file mode 100644 index 0000000..3e8d908 --- /dev/null +++ b/zabbix/getdata.h @@ -0,0 +1,2 @@ +char* trimall(char* s); +char* getparam(char* s); diff --git a/zabbix/main.c b/zabbix/main.c new file mode 100644 index 0000000..5810471 --- /dev/null +++ b/zabbix/main.c @@ -0,0 +1,46 @@ +#include "getdata.h" +#include +#define statfile "/var/run/extFilter_stat" +void main(char argc, char **argv){ + if(argc!=2){ + fprintf(stderr, "Usage example:\n \tzabbix_data extfilter.discovery\n\t or \n\tzabbix_data allports.received_packets\n",statfile); + exit(1); + } + if((argc==2) && !strcmp(argv[1],"extfilter.discovery")){ + char temp[255]; + memset(temp,0,sizeof(temp)); + FILE *sf=fopen(statfile,"r"); + if(sf==NULL){ + fprintf(stderr, "File %s not found!\n",statfile); + exit(1); + } + puts("{\n\"data\":["); + int commafirst=1; + while(fgets(temp,255,sf)!=NULL){ + if(commafirst){ + printf("{\"{#STATPARAM}\":\"%s\"}",getparam(trimall(temp))); + }else{ + printf(",\n{\"{#STATPARAM}\":\"%s\"}",getparam(trimall(temp))); + } + commafirst=0; + } + puts("\n]\n}"); + fclose(sf); + } + if(argc==2 && + (strstr(argv[1],"worker.")!=NULL) || (strstr(argv[1],"allworkers.")!=NULL) || (strstr(argv[1],"allports.")!=NULL) ){ + char temp[255]; + memset(temp,0,sizeof(temp)); + FILE *sf=fopen(statfile,"r"); + if(sf==NULL){ + fprintf(stderr, "File %s not found!\n",statfile); + exit(1); + } + while(fgets(temp,255,sf)!=NULL){ + if( !strcmp(getparam(trimall(temp)),trimall(argv[1])) ){ + puts(getvalue(trimall(temp))); + } + } + fclose(sf); + } +} diff --git a/zabbix/zbx_extfilter.xml b/zabbix/zbx_extfilter.xml new file mode 100644 index 0000000..eaea5cb --- /dev/null +++ b/zabbix/zbx_extfilter.xml @@ -0,0 +1,101 @@ + + + 2.0 + 2017-09-04T00:56:44Z + + + extfilter + + + + + +