icinga2学习和使用(二)

配置文件说明

本篇是说明icinga2的配置文件。跟nagios比较,逻辑思维是一样的,定义主机(组)、服务(组)、检测命令、模板、检测频率等。但是实际使用的语法却不一样,重新定义了一套关键词。具体细节可参考下文。有些地方我也没能搞明白,希望读者童鞋能一起探讨。

默认采用yum安装的icinga2.

1 matser server上配置文件的两个目录:

/etc/icinga2/, 更多的配置放在./conf.d下,这里主要是用来自定义配置。文件名,只要你能明白是用来做什么的即可,不需要一定区分user,service什么的。

/usr/share/icinga2/include/ , 这里主要是一些已经定义好的命令,可以直接使用。

2 各个配置文件的说明

commands.conf和command-plugins.conf   定义命令

object
CheckCommand "ssh" {

import
"plugin-check-command"

command
= PluginDir+ "/check_ssh"  #defined in constants.conf

arguments
= {

"-p"
= "$ssh_port$"

"host"
= {

value
= "$ssh_address$"

skip_key
= true

order
= -1

}

}

vars.ssh_address
= "$address$"

}

object CheckCommand 为定义命令的固件关键词

import导入模板command.conf里的

Command用法,PluginDir定义在constants.conf

Arguments参数,如果是自定义的脚本,可以不需要在这里定义命令

"-p"
= "$ssh_port$"  这个-p是插件本身的参数,后面的ssh_port是自定义名,格式$.....$

templates.conf   定义模板

针对host的检测模板:

template
Host "generic-host" {

max_check_attempts
= 3

check_interval
= 5m

retry_interval
= 30s

check_command
= "hostalive"

}

针对service的检测模板:

template
Service "generic-service" {

max_check_attempts
= 2

check_interval
= 5m

retry_interval
= 20s

}

template
Host   template
Service固定格式,后面引号内名字自定义

max_check_attempts检测遇到问题,最多尝试次数

check_interval 检测的频率

retry_interval  如果检测遇到问题,重新检测的频率

通知模板:

template
Notification "30mins-notification" {

interval
= 30m

command
= "mail-service-notification"

states
= [ Critical ]

types
= [ Problem, Recovery ]

period
= "24x7"

}

Command定义在commands.conf里

States这里设置需要发报警邮件的状态,我只设置critical,减少邮件量

Types为states的类型,很多

Perio报警的时间段

如果你想延迟第一次报警的时间,可如下:

apply
Notification "mail" to Service {

import
"generic-notification"

command
= "mail-notification"

users
= [ "icingaadmin" ]

times.begin
= 15m //
delay first notification

assign
where service.name == "ping4"

}

Tips:

When
detecting a problem with a host/service Icinga re-checks the object a
number of times (based on the max_check_attempts and retry_interval
settings) before sending notifications. This ensures that no
unnecessary notifications are sent for transient failures. During
this time the object is in a SOFT state.After all re-checks have been executed and the object is still in a
non-OK state the host/service switches to a HARD state
and notifications are sent.

users.conf  用来定义报警和定义主机

object
User "icingaadmin"
{

import
"generic-user"

display_name
= "Icinga 2 Admin"

groups
= [ "icingaadmins" ]

email
= "[email protected]"

}

object
Host "xx" {

display_name
= "xx"

address
= "xx"

groups
= [ "cs" ]

check_command
= "hostalive"

}

Object
User 或Object
Host是固定格式,后面的内容为自定义。

Host说明:

Import导入templates.conf里的模板

display_name 自定义

groups自定义,如果多个,用逗号隔开(但是是否每个都能用,有待确认)

address 可以是域名或者ip

check_command 检测主机的命令,这里用的hostalive,就是ping检测…

services.conf  定义服务(也可以给特别的服务单独写个xxx.conf)

objectService
"ssh" {

import
"generic-service"

check_command
= "ssh"

host_name=
"hk"

vars.ssh_port
= "22221"

}

针对单个主机的服务,可以用object
Service的方式定义。

var.ssh_port这里是自定义参数的使用方式。var.为固定格式,后面跟参数名,参数名是在command-plugins.conf中定义的,等号后面是自定义的端口。

针对一个服务很多主机的情况,用如下apply
service的方式定义:

applyService
"total_procs" {

import
"generic-service"

check_command
= "nrpe"    # use nrpe command to check

vars.nrpe_command
= "check_total_procs"
#command on client server

assignwhere
"es" in host.groups

ignorewhere host.address == ""

}

apply
Service "http 80" {

import
"generic-service"

check_command
= "http" #
command on monitor server which has argument “-H”

assign
where "vu" in host.groups

ignore
where host.address == ""

}

用apply的方式,一定有关键词assign和ignore,后者可以为空,可以多行ignore(写在一行没成功)。

这里两个service定义,原理是一样的,都用插件,check_nrpe或者check_http,这里写的命令http或者nrpe已经定义在command-plugins.conf。

groups.confg  定义服务组或者主机组

object
ServiceGroup "load" {

display_name
= "Load Checks"

assignwhereservice.vars.nrpe_command==
"check_load"

}

object
ServiceGroup "ssh" {

display_name
= "Ssh Checks"

assign
where service.check_command== "ssh"

}

object
HostGroup "es" {

display_name
= "es server"

}

notifications.conf  应用报警(之前做了模板,现在是应用)

apply
Notification "mail-icingaadmin" to Host {

import
"mail-host-notification"

user_groups
= [ "icingaadmins" ]

assign
where host.vars.sla == "24x7"

}

apply
Notification "mail-icingaadmin-5" to Service {

import
"5mins-notification"

user_groups
= [ "icingaadmins" ]

assign
where service.name == "ssh"

assign
where service.name == "check_system_5"

assign
where service.name == "zombie_procs"

assign
where service.name == "http 80"

assign
where service.name == "ssh"

}

验证并加载配置

icinga2
-c /etc/icinga2/icinga2.conf -C

/etc/init.d/icinga2
reload --config /etc/icinga2/icinga2.conf

时间: 2025-01-03 22:04:13

icinga2学习和使用(二)的相关文章

winform学习日志(二十三)---------------socket(TCP)发送文件

一:由于在上一个随笔的基础之上拓展的所以直接上代码,客户端: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net.Sockets; using Sys

Unix文件系统学习笔记之二: 文件描述符、inode和打开文件表

Unix文件系统学习笔记之二: 文件描述符.inode和打开文件表 系统盘上数据的布局 文件系统无非是关于数据在磁盘上的组织以及存储空间管理的,为此,首先需要知道磁盘上数据的总体布局方式.以Unix为例,最重要的一张表如下: Unix 进程管理中和用户文件.io 最相关的数据结构:usr 数据结构 The procstructure does not record information related to file access.  However the userstructure con

C++primer学习笔记(二)——Chapter 4

4.1  Fundamentals 1.Basic Concepts (1)操作符分为一元,二元或者三元操作符: (2)复杂的表达式中含有很多操作符时: 规则一:分为不同的级别,级别高的先运行: 规则二:相同级别的操作符有执行顺序的确定: (3)操作符可以改变操作数的类型 一般将级别低的转化成级别高的 (4)重载运算符 相同的运算符在对不同类型的对象进行操作的时候,会有不同的功能: (5)Lvalue和Rvalue 显而易见:Lvalue指的是Left value,Rvalue指的是Right

Android学习路线(二十)运用Fragment构建动态UI

要在Android系统上创建一个动态或者多面板的用户界面,你需要将UI组件以及activity行为封装成模块,让它能够在你的activity中灵活地切换显示与隐藏.你可以使用Fragment类来创建这些模块,它们能够表现得有些像嵌套的activity,它们定义着自己的布局,管理自己的生命周期. 当一个fragment指定了它自己的布局,它可以在activity中和其他的fragment配置为不同的组合,这样就能够为不同的屏幕尺寸来修改你的布局配置(在小屏幕上一次展现一个fragment,而在大屏

Android学习路线(二十一)运用Fragment构建动态UI——创建一个Fragment

你可以把fragment看成是activity的模块化部分,它拥有自己的生命周期,接受它自己的输入事件,你可以在activity运行时添加或者删除它(有点像是一个"子activity",你可以在不同的activity中重用它).本课将向你展示如何使用Support Libaray继承 Fragment 类来让你的应用能够兼容正在运行Android 1.6的设备. 提示: 如果你决定你的应用需求的最低API级别是11或者更高,那么你不需要使用Support Library,你可以直接使用

struts2学习笔记(二)—— 获取登录信息及计算在线人数

实现目的: 1.点击"Login"的超链接,进入登录页面 2.填写登录信息,提交表单,将用户信息保存进Session 3.显示用户名,并计算在线人数 4.点击"Logout"的超链接,在线人数减一,并使Session失效 Struts2实现: 1.配置web.xml文件 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:/

《语义网基础教程》学习笔记(二)

二.RDF概述(参考http://zh.transwiki.org/cn/rdfprimer.htm) 1.本体: 一个本体是一个概念体系(conceptualization)的显式的形式化规范. 一般来说,一个本体形式地刻画一个论域.一个典型的本体由有限个术语及它们之间的关系组成. ★在万维网这个环境中,本体提供了对给定领域的一种共识.这种共识对于消除术语差别是必要的. 通过把各自的术语差异映射到一个公共的本体之间的直接映射,可以消除这些术语差异. 不管采用哪种方案,本体都支持语义可共用性(s

《iOS应用逆向工程》学习笔记(二)iOS系统目录结构(部分)

首先下载个iFile,可以用来直观地查看iOS系统的目录结构. 下面记录一些关键的iOS目录结构: /var:"variable"的简写,存放一些经常更改的文件,例如日志.用户数据.临时文件等.其中/var/mobile/Applications下存放了所有App Store App. /Applications:存放所有的系统App和来自Cydia的App,不包括App Store App.越狱的过程把/Applications变成了一个符号链接,实际指向/var/stash/App

现代C++学习笔记之二入门篇2,数据转换

static_cast:    这种强制转换只会在编译时检查. 如果编译器检测到您尝试强制转换完全不兼容的类型,则static_cast会返回错误. 您还可以使用它在基类指针和派生类指针之间强制转换,但是,编译器在无法分辨此类转换在运行时是否是安全的. dynamic_cast: dynamic_cast在运行时检查基类指针和派生类指针之间的强制转换. dynamic_cast 是比 static_cast 更安全的强制类型转换,但运行时检查会带来一些开销. const_cast:    con

HTML5学习笔记(二)——表单1

表单一直是网页必不可少的一部分,一直以来,表单的作用被无限扩展,发展出了诸多新奇的用法,老版的HTML只支持很少的一部分常用表单,许多的新表单都需要借助CSS与JavaScript语言来进行构建,现在HTML5来了,她带来了新的表单,这些强大的表单项,可以省去一大块复杂的JavaScript代码,很值得去学习. 而且在新的表单里面,不再像以前每个表单都必须位于<form></form>之内,只要在<form></form>内定义一个id,然后在网页任何位置都