Community template repository

To ensure the Community template repository remains convenient and useful for all users, contributors must adhere to the practices outlined below.

Directory structure and naming rules

  • Each template must reside in its own folder inside the appropriate category:

    • You may create additional subcategories if needed (e.g., for a specific vendor like Server_Hardware/Dell, or a logical subset of a parent category such as Applications/Web-servers). Avoid unnecessary complexity in the hierarchy.
    • Allowed characters for subcategory names: [a-zA-Z0-9_-].
    • Do not place a new template inside the folder of an existing template. If your template is distinct from another contributor's, create a new folder for it rather than modifying or overwriting theirs.
      • If you notice issues with an existing template, we encourage you to first reach out to the template's author (if possible) and ask them to address the problems instead of submitting a pull request with fixes yourself. This helps to respect the original author's intent and avoids unnecessary maintenance burden on the reviewers.
  • Template folder name requirements:

    • Must start with template_ (lowercase).
    • Should match the regex: ^template_[.a-zA-Z0-9()_-]+$.
    • Keep names short, human-readable, and descriptive, for example: template_linux_services. Bad example: template_microsoft_iis_7.5,_8.0,_8.5_and_10_services,_ports_and_performance_counters.
  • Separate subfolders must exist for each supported Zabbix version. The format for these version directories is X.X, where X.X refers to the major version (7.0, 7.4, etc.). Ensure that the template file inside each version folder is actually exported for that version of Zabbix. It is acceptable to skip some Zabbix versions if the template is identical across them (the template import is backwards compatible and you can import templates for previous versions into newer Zabbix version).

  • Each version folder must contain only:

    • One template file in YAML, JSON, or XML format:
      • Filename must match the regex: ^template_[.a-zA-Z0-9()_-]+\.(yaml|json|xml)$.
      • Prefer YAML, as it is the current default export format in Zabbix. There is no need to provide multiple formats.
    • An optional README.md file (recommended):
      • If provided, it should include user-facing information: setup instructions, which macros are required to be filled, a list of metrics and triggers, etc. Do not leave it empty or simply containing link to private resources/repositories with instructions. Wherever possible, include complete instructions directly in the README.
      • If referring to external documentation, link only to official or publicly accessible resources.
      • If provided, it should be present for each version subfolder.
      • It is recommended to include your name or username as the author in both the README.md and the template's internal description.
    • An optional files folder:
      • Place any additional files here - e.g., scripts for external checks, user parameters, images, helper utilities, etc.
      • Do not link to private repositories, file-sharing services, or inaccessible resources. Always aim to make these files directly available in the repository. Linking to official, well-known third-party projects that are required for the template (such as the node_exporter repository for a Linux monitoring template) is acceptable, and can be noted in the README.md.
      • It's also possible to specify instructions instead of providing separate files for such cases as user parameters (you could provide instructions on how to create these directly in the README.md).
  • Do not upload templates as compressed (e.g., .zip, .tar.gz) files.

Template dependencies and import

  • The template must import without errors on a fresh installation of the corresponding Zabbix version.
  • If the template depends on other templates, include them in the export file (in the Zabbix frontend, you can select multiple templates before exporting.) This also ensures the proper template import even on a fresh Zabbix server installation.
  • Avoid creating unnecessary or overly complex template linkages, which could complicate importing or managing the template.
  • Ensure that all necessary resources (e.g., scripts, user parameters) are either included in the files folder or described clearly in the README.md.

Licensing

  • All community templates and additional files in this repository are published under the MIT license. Third-party licenses, even the compatible ones (for example, GPL v2/v3) are not accepted.
  • Do not publish third-party software that uses such licenses as additional files. If such software is necessary for the template to function, provide a link to its official project page instead.

Examples

Correct directory structure

template_name
       ├── 7.0
       |   ├── template_name.yaml
       |   ├── README.md
       |   ├── files
       |   |   ├── other_files
       |   |   ├── external_check.sh
       |   |   ├── user_parameters.conf
       |   |   ├── ...
       ├── 7.4
       |   ├── template_name.yaml
       |   ├── README.md
       |   ├── files
       |   |   ├── other_files
       |   |   ├── external_check.sh
       |   |   ├── user_parameters.conf
       |   |   ├── ...

Incorrect directory structure

Missing version directory:

template_name
       ├── template_name.yaml
       ├── README.md
       ├── files
       |   ├── other_files
       |   ├── external_check.sh
       |   ├── user_parameters.conf
       |   ├── ...

Multiple template files:

template_name
       ├── 7.0
       |   ├── template_name_1.yaml
       |   ├── template_name_2.yaml
       |   ├── template_name_3.yaml
       |   ├── README.md
       |   ├── files
       |   |   ├── other_files
       |   |   ├── external_check.sh
       |   |   ├── user_parameters.conf
       |   |   ├── ...

Compressed files are not allowed:

template_name
       ├── 7.0
       |   ├── template_name.zip
       

All files in the same directory:

template_name
       ├── 7.0
       |   ├── template_name.yaml
       |   ├── README.md
       |   ├── external_check.sh
       |   ├── script.py
       |   ├── user_parameters.conf