Monitoring Azure resources with Zabbix

Posted: August 21, 2018 in Azure

I used this post as starting point.

Creating Azure application

(ID/keys will be used for authentication to Azure)

In Azure portal click Azure Active directory-App registrations-new App registration



In App registrations select All apps from drop-down menu-click on Zabbix application


Write down application ID (we’ll use it on scripts)


Click Settings-Keys-set a name,duration and click Save


Write down key


Write down TenantID


Write down Subscription ID-from Azure dashboard,click Cost Management + Billing under my subscription write subscription ID


Give application read rights to resource group

click on resource group-Access control (IAM)


click Add-select Reader role-Assign access to Azure AD user,group or application and select Zabbix application


Install powershell on Zabbix server (CentOS)

# Register the Microsoft RedHat repository
curl | sudo tee /etc/yum.repos.d/microsoft.repo
# Install PowerShell
sudo yum install -y powershell

Extract and copy all files in to /usr/lib/zabbix/externalscripts, make sure *.sh files are executable

Supported services are SQL,storage account,Virtual Machines and Virtual Network gateway

All available services and metric:

Time periods (monitoring intervals) are called timegrains

time_grains = {
"PT1M" => "1 Minute",
"PT5M" => "5 Minutes",
"PT1H" => "1 Hour",
"PT12H" => "12 Hours"

In trapper.ps1 and azure.ps1 substitute TenantID,applicationID, application key in appropriate sections/

Files can be downloaded from here


For VM:

./ resource group subscription vm

For SQL:

./ resource group subscription sql

For network gateway:

./ resource group subscription vng

For Storage account

./ resource group subscription storage

[root@ip-172-31-27-77 externalscripts]# ./ RG  subscriptionD storage
"{#ID}": "/subscriptions/111-222-333/resourceGroups/RG/providers/Microsoft.Storage/storageAccounts/storageaccount",
"{#STORAGEACCOUNT}": "storageaccount"
"{#ID}": "/subscriptions/111-222-333/resourceGroups/RG/providers/Microsoft.Storage/storageAccounts/storageaccount",
"{#STORAGEACCOUNT}": "storageaccount"
"{#ID}": "/subscriptions/111-222-333/resourceGroups/RG/providers/Microsoft.Storage/storageAccounts/storageaccount",
"{#STORAGEACCOUNT}": "storageaccount"

give ownership of azure.json to zabbix user:

chown zabbix:zabbix azure.json

create dummy host and attach template, specify resource group and subscription ID


Test zabbix trapper:

./ zabbix-dummy-host

if no issues,create cron job for trapper (for example to run it every 15 minutes):

*/15 * * * * /usr/lib/zabbix/externalscripts/ dummy-host

  1. Uladzislau Dadzimau says:

    I believe you might want to put a back-link to the original source of your code:


  2. jane says:

    Hello. Thanks for your detailed manuals. By the way, I’m the beginner of azure-zabbix.
    I wonder what you mean about the below sentence.

    “Copy all files in to /usr/lib/zabbix/externalscripts, make sure *.sh files are executable”

    Which files do I need to make it as a zip file ? Where are the *.sh files located?
    I would appreciate your reply asap.


  3. Paulo Rezende says:

    Dear good afternoon

    Next all the tutorial with no error, however, if you test an integration, do not call anything. Look:



  4. Paulo Rezende says:



  5. Dragan979

    I try test here but I have one error

    You cannot call a method on a null-valued expression.
    At /usr/lib/zabbix/externalscripts/azure/azure.ps1:32 char:13
    + if ($token.expires_on.ToInt64($null) – [int64]((Get-Date).ToU …
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo : InvalidOperation: (:) [], RuntimeException
    + FullyQualifiedErrorId : InvokeMethodOnNull


    • dragan979 says:

      azure script should be under /usr/lib/zabbix/externalscripts/azure.ps1, not inside azure folder


      • Mun says:

        I try to run: ./ XXXXXX XXXXXXXXXXXXXXXXXXXXXX but there is no result appears. Only shows:
        and my azure.json is not empty.
        On Zabbix GUI appears “value should be json object”
        Any suggestion?


  6. Dmitriy says:

    Hi! When I run the script from console with “sudo -u zabbix”, it returns correct data, but at zubbix console there is error “value should be a JSON object”. There are no particular errors In the zabbix_server.log with debug level = 5… Do you have any ideas where to look?


    • dragan979 says:

      hmm, never faced similar issue, i suggest to create cron job to run every 40 minutes under zabbix user, i suspect Azure keys expires every 60 minutes.


    • Dmitriy says:

      I’ve found the issue – create not lld item with the same external check key and type “text” and get the error : ./azure.ps1 not found… I’ve created .sh with the relevant path and this script successfully runs at the console and doesn’t work with as external check…


  7. Thomas says:

    Can you please re-upload the file the onedrive link is not working ?


  8. Thomas says:

    It’s working sorry.


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s