1"use strict";(globalThis.webpackChunkmikes_dev_notebook=globalThis.webpackChunkmikes_dev_notebook||[]).push([[17016],{102407(e,i,n){n.r(i),n.d(i,{assets:()=>c,contentTitle:()=>o,default:()=>h,frontMatter:()=>r,metadata:()=>s,toc:()=>l});const s=JSON.parse('{"id":"DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index","title":"Zabbix Monitoring a Website","description":"Mong Kok, Hong Kong","source":"@site/docs/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index.md","sourceDirName":"DevOps/Zabbix/2020-07-17--zabbix-website-monitor","slug":"/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/2020-07-17","permalink":"/docs/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/2020-07-17","draft":false,"unlisted":false,"editUrl":"https://github.com/facebook/docusaurus/tree/main/packages/create-docusaurus/templates/shared/docs/DevOps/Zabbix/2020-07-17--zabbix-website-monitor/index.md","tags":[{"inline":true,"label":"LINUX","permalink":"/docs/tags/linux"},{"inline":true,"label":"Zabbix","permalink":"/docs/tags/zabbix"}],"version":"current","sidebarPosition":9060,"frontMatter":{"sidebar_position":9060,"slug":"2020-07-17","title":"Zabbix Monitoring a Website","authors":"mpolinowski","tags":["LINUX","Zabbix"]},"sidebar":"tutorialSidebar","previous":{"title":"Zabbix Email Notifications","permalink":"/docs/DevOps/Zabbix/2020-07-18--zabbix-email-notification/2020-07-18"},"next":{"title":"Zabbix Agent","permalink":"/docs/DevOps/Zabbix/2020-07-16--zabbix-agent/2020-07-16"}}');var t=n(474848),a=n(28453);const r={sidebar_position:9060,slug:"2020-07-17",title:"Zabbix Monitoring a Website",authors:"mpolinowski",tags:["LINUX","Zabbix"]},o=void 0,c={},l=[{value:"Page Availability Check",id:"page-availability-check",level:2},{value:"Login Check",id:"login-check",level:2},{value:"Frontend Login",id:"frontend-login",level:3},{value:"Verifying that Content is available",id:"verifying-that-content-is-available",level:3},{value:"Triggers and Notifications",id:"triggers-and-notifications",level:3},{value:"Create alarm triggers",id:"create-alarm-triggers",level:4},{value:"Realworld Scenarios",id:"realworld-scenarios",level:2},{value:"Discourse Forum",id:"discourse-forum",level:3},{value:"Elasticsearch Cluster",id:"elasticsearch-cluster",level:3},{value:"Gitlab C/I Server",id:"gitlab-ci-server",level:3},{value:"Using the Gitlab Endpoints",id:"using-the-gitlab-endpoints",level:4},{value:"PostFix Queues",id:"postfix-queues",level:2},{value:"Check if FTP Service is Up",id:"check-if-ftp-service-is-up",level:2},{value:"FTP Template",id:"ftp-template",level:3},{value:"Adjusting the Timeout",id:"adjusting-the-timeout",level:3}];function d(e){const i={a:"a",code:"code",h2:"h2",h3:"h3",h4:"h4",img:"img",li:"li",p:"p",pre:"pre",strong:"strong",table:"table",tbody:"tbody",td:"td",th:"th",thead:"thead",tr:"tr",ul:"ul",...(0,a.R)(),...e.components};return(0,t.jsxs)(t.Fragment,{children:[(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Mong Kok, Hong Kong",src:n(398253).A+"",width:"1500",height:"514"})}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"#page-availability-check",children:"Page Availability Check"})}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.a,{href:"#login-check",children:"Login Check"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"#frontend-login",children:"Frontend Login"})}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"#verifying-that-content-is-available",children:"Verifying that Content is available"})}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.a,{href:"#triggers-and-notifications",children:"Triggers and Notifications"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"#create-alarm-triggers",children:"Create alarm triggers"})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.a,{href:"#realworld-scenarios",children:"Realworld Scenarios"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"#discourse-forum",children:"Discourse Forum"})}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"#elasticsearch-cluster",children:"Elasticsearch Cluster"})}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.a,{href:"#gitlab-ci-server",children:"Gitlab C/I Server"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"#using-the-gitlab-endpoints",children:"Using the Gitlab Endpoints"})}),"\n"]}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"#postfix-queues",children:"PostFix Queues"})}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.a,{href:"#check-if-ftp-service-is-up",children:"Check if FTP Service is Up"}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"#ftp-template",children:"FTP Template"})}),"\n",(0,t.jsx)(i.li,{children:(0,t.jsx)(i.a,{href:"#adjusting-the-timeout",children:"Adjusting the Timeout"})}),"\n"]}),"\n"]}),"\n"]}),"\n",(0,t.jsx)(i.h2,{id:"page-availability-check",children:"Page Availability Check"}),"\n",(0,t.jsxs)(i.p,{children:["On the dashboard screen, access the Configuration menu and select the Host option. On the Host properties screen, access the Applications tab. On the top right part of the screen, click on the Create application button and name the application according to the website you want to monitor, e.g. ",(0,t.jsx)(i.co
1de,{children:"INSTAR Forum Website Monitor"}),":"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(126620).A+"",width:"1264",height:"273"})}),"\n",(0,t.jsxs)(i.p,{children:["Back on the ",(0,t.jsx)(i.strong,{children:"Application Screen"})," on the top right, click on the ",(0,t.jsx)(i.strong,{children:"Web Scenarios"})," link and then the ",(0,t.jsx)(i.strong,{children:"Create Web Scenario"})," button. On the web scenario screen, you need to configure the following items:"]}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Name"}),": Enter a website identification."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Application"}),": Choose the application you created before, e.g. ",(0,t.jsx)(i.code,{children:"INSTAR Forum Website Monitor"}),"."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Update interval"}),": 1 Minute"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Agent"}),": Zabbix"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Enabled"}),": Yes"]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(384727).A+"",width:"960",height:"639"})}),"\n",(0,t.jsxs)(i.p,{children:["Access the ",(0,t.jsx)(i.strong,{children:"Steps"})," tab to add a new step and configure the following items:"]}),"\n",(0,t.jsxs)(i.ul,{children:["\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Name"}),": Enter an identification."]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"URL"}),": Enter the website URL"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Follow redirects"}),": Yes"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Retrieve mode"}),": Headers"]}),"\n",(0,t.jsxs)(i.li,{children:[(0,t.jsx)(i.strong,{children:"Require status code"}),": 200"]}),"\n"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(439150).A+"",width:"941",height:"470"})}),"\n",(0,t.jsxs)(i.p,{children:["Click on the Add button to finish the web scenario configuration and wait 5 minutes. In order to test your configuration, access the Monitoring menu, click on the ",(0,t.jsx)(i.strong,{children:"Latest data"})," and filter for your server and application:"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(356865).A+"",width:"1256",height:"528"})}),"\n",(0,t.jsx)(i.h2,{id:"login-check",children:"Login Check"}),"\n",(0,t.jsx)(i.h3,{id:"frontend-login",children:"Frontend Login"}),"\n",(0,t.jsx)(i.p,{children:"Go to Configuration \u2192 Hosts, pick a host and click on Web in the row of that host. Then click on Create web scenario."}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(135736).A+"",width:"896",height:"689"})}),"\n",(0,t.jsxs)(i.p,{children:["In the new scenario form we will name the scenario as ",(0,t.jsx)(i.code,{children:"Zabbix Login"})," and create a new ",(0,t.jsx)(i.code,{children:"Zabbix Login"})," application for it. Note that we will also create two variables: ",(0,t.jsx)(i.code,{children:"{user}"})," and ",(0,t.jsx)(i.code,{children:"{password}"}),"."]}),"\n",(0,t.jsxs)(i.p,{children:["Now we can define steps for the scenario. Click on ",(0,t.jsx)(i.strong,{children:"Add"})," button in the ",(0,t.jsx)(i.strong,{children:"Steps"})," tab to add individual steps. We start by checking that the first page responds correctly, returns with HTTP response code ",(0,t.jsx)(i.code,{children:"200"})," and contains text ",(0,t.jsx)(i.code,{children:"Zabbix SIA"}),":"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(481491).A+"",width:"901",height:"463"})}),"\n",(0,t.jsxs)(i.p,{children:["When done configuring the step, click on ",(0,t.jsx)(i.strong,{children:"Add"}),". You can check if the service is running and receiving the correct HTTP response code:"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(842634).A+"",width:"1227",height:"528"})}),"\n",(0,t.jsxs)(i.p,{children:["We continue by logging in to the Zabbix frontend, and we do so by reusing the variables we defined on the scenario level - ",(0,t.jsx)(i.co
1de,{children:"{user}"})," and ",(0,t.jsx)(i.code,{children:"{password}"}),". Take note also of how we are getting the content of the ",(0,t.jsx)(i.code,{children:"{sid}"})," variable (session ID) using a variable syntax with regular expression ",(0,t.jsx)(i.code,{children:'regex:name="csrf-token" content="([0-9a-z]{16})"'}),":"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(619229).A+"",width:"895",height:"858"})}),"\n",(0,t.jsx)(i.h3,{id:"verifying-that-content-is-available",children:"Verifying that Content is available"}),"\n",(0,t.jsxs)(i.p,{children:["Being logged in, we should now verify a string, that is only visible when logged in, is available to our user - for example, ",(0,t.jsx)(i.code,{children:"Reports"}),". We can do this by adding another step to our scenario:"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(186196).A+"",width:"907",height:"443"})}),"\n",(0,t.jsx)(i.p,{children:"Now that we have verified that frontend is accessible and we can log in and retrieve logged-in content, we should also log out - otherwise Zabbix database will become polluted with lots and lots of open session records:"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(414970).A+"",width:"910",height:"575"})}),"\n",(0,t.jsxs)(i.p,{children:["We can also check that we successfully logged out by looking for the ",(0,t.jsx)(i.strong,{children:"Username"})," string:"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(4803).A+"",width:"892",height:"449"})}),"\n",(0,t.jsx)(i.p,{children:"A complete configuration of web scenario steps should look like this:"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(142824).A+"",width:"918",height:"374"})}),"\n",(0,t.jsx)(i.p,{children:"To view web scenario information go to Monitoring \u2192 Hosts, locate the host in the list and click on the Web hyperlink in the last column:"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(591217).A+"",width:"1212",height:"689"})}),"\n",(0,t.jsx)(i.h3,{id:"triggers-and-notifications",children:"Triggers and Notifications"}),"\n",(0,t.jsx)(i.h4,{id:"create-alarm-triggers",children:"Create alarm triggers"}),"\n",(0,t.jsxs)(i.p,{children:["A trigger is the event that triggers email notifications. Triggers are built using an expression. Select ",(0,t.jsx)(i.code,{children:"Configuration > Hosts > Host Name > Triggers"})," and click ",(0,t.jsx)(i.strong,{children:"Create trigger"}),":"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(383381).A+"",width:"800",height:"241"})}),"\n",(0,t.jsx)(i.p,{children:"In this example, since you are using a web scenario, you want to create a trigger for when the web scenario code is anything other than a success based on the HTTP status code. Use the following expression:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-json",children:"{Host_as_set_in_zabbix:web.test.fail[web_scenario_name].last()} <> 0\n"})}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(854226).A+"",width:"958",height:"304"})}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(175771).A+"",width:"1229",height:"112"})}),"\n",(0,t.jsx)(i.h2,{id:"realworld-scenarios",children:"Realworld Scenarios"}),"\n",(0,t.jsx)(i.h3,{id:"discourse-forum",children:"Discourse Forum"}),"\n",(0,t.jsxs)(i.p,{children:["You can test for the ",(0,t.jsx)(i.strong,{children:"Health Check URL"})," ",(0,t.jsx)(i.code,{children:"URL/srv/status"}),". This URL will return a ",(0,t.jsx)(i.code,{children:"ok"})," when your Discourse installation is happy:"]}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(546654).A+"",width:"900",height:"472"})}),"\n",(0,t.jsx)(i.h3,{id:"elasticsearch-cluster",children:"Elasticsearch Cluster"}),"\n",(0,t.jsxs)(i.p,{children:["You can test for the ",(0,t.jsx)(i.strong,{children:"Health Check URL"}
1)," ",(0,t.jsx)(i.code,{children:"URL/_cluster/health"}),". Or use a search query that will return a guaranteed answer - for example you can check if the request did not time-out ",(0,t.jsx)(i.code,{children:'"timed_out":false'}),":"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-json",children:'https://elasticsearch.instar.com/_search?q=Lepidoptera\r\n\r\n{"took":289,"timed_out":false,"_shards":{"total":10,"successful":10,"skipped":0,"failed":0},"hits":{"total":{"value":0,"relation":"eq"},"max_score":null,"hits":[]}}\n'})}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(722439).A+"",width:"885",height:"465"})}),"\n",(0,t.jsx)(i.h3,{id:"gitlab-ci-server",children:"Gitlab C/I Server"}),"\n",(0,t.jsx)(i.p,{children:"GitLab provides liveness and readiness probes to indicate service health and reachability to required services. These probes report on the status of the database connection, Redis connection, and access to the filesystem. To control access to those endpoints via IP whitelisting, you can add single hosts or use IP ranges:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"nano /etc/gitlab/gitlab.rb\n"})}),"\n",(0,t.jsx)(i.p,{children:"And add / uncomment the following:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-rb",children:"### Monitoring settings\r\n###! IP whitelist controlling access to monitoring endpoints\r\ngitlab_rails['monitoring_whitelist'] = ['127.0.0.0/8', 'my-zabbix-server-ip']\r\n###! Time between sampling of unicorn socket metrics, in seconds\r\ngitlab_rails['monitoring_unicorn_sampler_interval'] = 10\n"})}),"\n",(0,t.jsx)(i.p,{children:"Save the file and reconfigure GitLab for the changes to take effect. Reconfigure Omnibus GitLab with:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"sudo gitlab-ctl reconfigure\n"})}),"\n",(0,t.jsx)(i.h4,{id:"using-the-gitlab-endpoints",children:"Using the Gitlab Endpoints"}),"\n",(0,t.jsxs)(i.table,{children:[(0,t.jsx)(i.thead,{children:(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.th,{}),(0,t.jsx)(i.th,{})]})}),(0,t.jsxs)(i.tbody,{children:[(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"Health"})}),(0,t.jsx)(i.td,{children:"Checks whether the application server is running. It does not verify the database or other services are running. This endpoint circumvents Rails Controllers and is implemented as additional middleware BasicHealthCheck very early into the request processing lifecycle."})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"Readiness"})}),(0,t.jsxs)(i.td,{children:["The readiness probe checks whether the GitLab instance is ready to accept traffic via Rails Controllers. The check by default does validate only instance-checks. If the ",(0,t.jsx)(i.code,{children:"all=1"})," parameter is specified, the check will also validate the dependent services (Database, Redis, Gitaly etc.) and gives a status for each."]})]}),(0,t.jsxs)(i.tr,{children:[(0,t.jsx)(i.td,{children:(0,t.jsx)(i.strong,{children:"Liveness"})}),(0,t.jsx)(i.td,{children:"Checks whether the application server is running. This probe is used to know if Rails Controllers are not deadlocked due to a multi-threading."})]})]})]}),"\n",(0,t.jsxs)(i.p,{children:["You can now ",(0,t.jsx)(i.code,{children:"curl"})," the following URLs from your Zabbix Server terminal to verify that they are accessible:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"curl https://git.example.com/-/health\r\n\r\nGitLab OK\n"})}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-json",children:'curl https://git.example.com/-/readiness\r\n\r\n"status":"ok"\n'})}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-json",children:'curl https://git.example.com/-/readiness?all=1\r\n\r\n{"status":"ok","master_check":[{"status":"ok"}],"db_check":[{"status":"ok"}],"redis_check":[{"status":"ok"}],"cache_check":[{"status":"ok"}],"queues_check":[{"status":"ok"}],"shared_state_check":[{"status":"ok"}],"gitaly_check":[{"status":"ok","labels":{"shard":"default"}}]}\n'})}
1),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-json",children:'curl https://git.example.com/-/liveness\r\n\r\n{"status":"ok"}\n'})}),"\n",(0,t.jsx)(i.p,{children:"Now all you have to do is adding checks for those URLs in the Zabbix dashboard."}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(471756).A+"",width:"1217",height:"355"})}),"\n",(0,t.jsx)(i.h2,{id:"postfix-queues",children:"PostFix Queues"}),"\n",(0,t.jsxs)(i.p,{children:["Download the ",(0,t.jsx)(i.a,{href:"https://raw.githubusercontent.com/rafael747/zabbix-postfix/master/template_postfix.xml",children:"template_postfix.xml"})," file, import the template into Zabbix and apply it to your Zimbra server."]}),"\n",(0,t.jsx)(i.p,{children:"To connect your client server run the following commands:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"# Install the following packages\r\n\r\n# Debian/Ubuntu\r\napt install pflogsumm bc zabbix-agent zabbix-sender\r\n\r\n# RHEL/Centos (replace the zabbix version with the one your using)\r\nyum install https://repo.zabbix.com/zabbix/4.2/rhel/6/x86_64/zabbix-release-4.2-1.el6.noarch.rpm\r\nyum install postfix-perl-scripts bc zabbix-agent zabbix-sender\r\n\r\ncp zabbix_postfix.sh /usr/local/sbin/\r\ncp pygtail.py /usr/local/sbin/\r\nchmod +x /usr/local/sbin/pygtail.py\r\nchmod +x /usr/local/sbin/zabbix_postfix.sh\r\n\r\ncp zabbix_postfix /etc/sudoers.d/\r\nchmod 440 /etc/sudoers.d/zabbix_postfix\r\n\r\n# Zabbix agent config dir may change, see https://github.com/rafael747/zabbix-postfix/issues/3#issuecomment-623629611\r\n# Debian/Ubuntu\r\ncp zabbix_postfix.conf /etc/zabbix/zabbix_agentd.conf.d/\r\n\r\n# RHEL/Centos\r\ncp zabbix_postfix.conf /etc/zabbix/zabbix_agentd.d/\r\n\r\nservice sudo restart\r\nservice zabbix-agent restart\n"})}),"\n",(0,t.jsx)(i.p,{children:"And add a crontab entry:"}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"# Zabbix check\r\n*/5 * * * * /usr/local/sbin/zabbix_postfix.sh 1>/dev/null 2>/dev/null'\n"})}),"\n",(0,t.jsx)(i.h2,{id:"check-if-ftp-service-is-up",children:"Check if FTP Service is Up"}),"\n",(0,t.jsx)(i.h3,{id:"ftp-template",children:"FTP Template"}),"\n",(0,t.jsx)(i.p,{children:"Start by adding the official FTP template - this allows you to add a graph to your dashboard showing the availability of your FTP service:"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(202123).A+"",width:"831",height:"331"})}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(980994).A+"",width:"1257",height:"401"})}),"\n",(0,t.jsx)(i.p,{children:"Creates a TCP connection and expects the first 4 characters of the response to be \u201c220 \u201d, then sends \u201cQUIT\\r\\n\u201d. Default port 21 is used if not specified."}),"\n",(0,t.jsx)(i.p,{children:"The template comes with a trigger that we can use to send out notifications:"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(529177).A+"",width:"1268",height:"530"})}),"\n",(0,t.jsx)(i.h3,{id:"adjusting-the-timeout",children:"Adjusting the Timeout"}),"\n",(0,t.jsxs)(i.p,{children:["The default timeout for the ",(0,t.jsx)(i.code,{children:"ftp_check"})," started giving me constant alerts. The only way to adjust the this value that I could find was a global timeout in the agent configuration file:"]}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-bash",children:"nano /etc/zabbix/zabbix_agent2.conf\n"})}),"\n",(0,t.jsx)(i.pre,{children:(0,t.jsx)(i.code,{className:"language-cfg",children:"### Option: Timeout\r\n# Spend no more than Timeout seconds on processing\r\n#\r\n# Mandatory: no\r\n# Range: 1-30\r\n# Default:\r\n# Timeout=3\r\nTimeout=10\n"})}),"\n",(0,t.jsx)(i.p,{children:"After setting it to 10s the barrage of Slack notifications finally ceased:"}),"\n",(0,t.jsx)(i.p,{children:(0,t.jsx)(i.img,{alt:"Zabbix Monitoring a Website",src:n(932272).A+"",width:"943",height:"626"})})]})}function h(e={}){const{wrapper:i}={...(0,a.R)(),...e.components};return i?(0,t.jsx)(i,{...e,children:(0,t.jsx)(d,{...e})}):d(e)}},126620(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_01-eb4f7a1b0e7c33a4ae2097a71938d789.png";n.d(i,["A",0,s])},384727(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_02-51ab29ffbe939ae954ad1210202d13df.png";n.d(i,["A",0,s])},439150(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_03-d8df1ab0e4de8d5024ec3cf9aff55
1d3e.png";n.d(i,["A",0,s])},356865(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_04-5f331ad4c04f2dccf8c4ad08baaeae3b.png";n.d(i,["A",0,s])},135736(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_05-8e11cdfaab4d9d77b3e9aacbd8d90da3.png";n.d(i,["A",0,s])},481491(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_06-4a922acbc7c0ef1d34fc7d298075f7e9.png";n.d(i,["A",0,s])},842634(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_07-feeedcf884136c1d9273337b5fa147ea.png";n.d(i,["A",0,s])},619229(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_08-23569fde5f94ba4e9751da108ec87afb.png";n.d(i,["A",0,s])},186196(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_09-bf186543dd2dd12dca19f486fb3cf088.png";n.d(i,["A",0,s])},414970(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_10-84bb180d9566878d63dc7340727fbe07.png";n.d(i,["A",0,s])},4803(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_11-50c523dcff51836c76674d6b4aa625f7.png";n.d(i,["A",0,s])},142824(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_12-d46962b2e3b2714294a1fd6cf74185a8.png";n.d(i,["A",0,s])},591217(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_13-9b32fb1ff0b4b19fcec917f969672e9a.png";n.d(i,["A",0,s])},546654(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_14-67dd983d25d59920b646ca39ba054156.png";n.d(i,["A",0,s])},722439(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_15-c0eb01520445f9df14fecb962ba40b3a.png";n.d(i,["A",0,s])},471756(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_16-5cc057fdfe252338c3263f400cf2bdb7.png";n.d(i,["A",0,s])},383381(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_17-7e197c8c839af3c938431c0be5ec1dae.png";n.d(i,["A",0,s])},854226(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_18-a18160bf12f05bc1bc1e6fb1b2135e78.png";n.d(i,["A",0,s])},175771(e,i,n){n.d(i,["A",0,"data:image/png;base64,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"])},202123(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_20-13c1ab71fe3cdc9c3981d73d5af4f6ee.png";n.d(i,["A",0,s])},980994(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_21-f5e7224a8ee350050a97eecfa8f8fc2d.png";n.d(i,["A",0,s])},529177(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_22-e5195425c6add59668b8d61cf4a934dc.png";n.d(i,["A",0,s])},932272(e,i,n){const s=n.p+"assets/images/Zabbix_WebSite_Monitor_23-a170a8a1a822802d38f5b8bc71f33dd3.png";n.d(i,["A",0,s])},398253(e,i,n){const s=n.p+"assets/images/photo-kt443t6d_64hdh43hfh6dgjdfhg4_d-f4f267a147f9362dde68d83d72f6e8c5.jpg";n.d(i,["A",0,s])},28453(e,i,n){n.d(i,{R:()=>r,x:()=>o});var s=n(296540);const t={},a=s.createContext(t);function r(e){const i=s.useContext(a);return s.useMemo(function(){return"function"==typeof e?e(i):{...i,...e}},[i,e])}function o(e){let i;return i=e.disableParentContext?"function"==typeof e.components?e.components(t):e.components||t:r(e.components),s.createElement(a.Provider,{value:i},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.