low level discovery功能

在配置Items时,有时需要对类似的Items进行添加,这些Items具有一些共同的特性,表现为某些特定的参数是变量,而其他设置都是一样的。
low level discovery 的key可以对网卡、文件系统、SNMP OIDS进行自动发现,除此之外,还支持自定义功能。

low level discovery 的使用过程分为下面两步:

  • 自动发现特定变量的名称
  • 添加对变量的Items.

zabbix中low level discovery 的 key返回值是一个JSON格式。可以打开一个模板的自动发现来观察。

用zabbix-get不能获取到snmp的值,只能在web页面进行配置使用。
**举个例子:
当有大量URL需要监控时,形如http://www.baidu.com,要求URL状态不为200时发出告警。因为URL经常变化,但其他状态不发生变化,那么它刚好可以用zabbix的low level discovery 功能轻松解决此问题。**
  1、编写low level discovery 自动发现脚本,low level discovery 的脚本是一个JSON格式。
[root@minion-122 scripts]# cat web_site_code_status
#!/bin/bash
source /etc/bashrc > /dev/null 2>&1
source /etc/profile > /dev/null 2>&1
Web_SITE_discovery () {
    Web_SITE=($(cat /etc/zabbix/scripts/Web.txt | grep -v "^#"))
        printf '{\n'
        printf '\t"data":[\n'
    for ((i=0;i<${#Web_SITE[@]};++i))
    {
        num=$(echo $((${#Web_SITE[@]}-1)))
        if [ "$i" != ${num} ];
        then
          printf "\t\t{ \n"
          printf "\t\t\t\"{#SITENAME}\":\"${Web_SITE[$i]}\"},\n"
        else
          printf "\t\t{ \n"
          printf "\t\t\t\"{#SITENAME}\":\"${Web_SITE[$num]}\"}]}\n"
        fi
        }
    }
    web_site_code () {
        /usr/bin/curl -o /dev/null -s -w %{http_code} http://$1
    }
    case "$1" in
    web_site_discovery)
        Web_SITE_discovery
    ;;
    web_site_code)
        web_site_code $2
    ;;
    *)
    echo "Usage:$0 {web_site_discovery|web_site_code [URL]}"
    ;;
    esac

Web.txt

[root@minion-122 scripts]# cat Web.txt
www.taobao.com
www.baidu.com
www.weibo.com

测试脚本输出:


自定义key配置文件

[root@minion-122 zabbix_agentd.conf.d]# cat web_site_discovery.conf
UserParameter=web.site.discovery,/etc/zabbix/scripts/web_site_code_status web_site_discovery
UserParameter=web.site.code[*],/etc/zabbix/scripts/web_site_code_status web_site_code $1

重启zabbix-agent。服务端测试:

[root@localhost ~]# zabbix_get -s web1 -k web.site.discovery
{
    "data":[
        {
            "{#SITENAME}":"www.taobao.com"},
        {
            "{#SITENAME}":"www.baidu.com"},
        {
            "{#SITENAME}":"www.weibo.com"}]}

Web下创建模板。
“配置”->“模板”->“创建模板”


点击“添加”便会出现下图。

点击“应用集”->“创建新应用集”


点击“添加”。点击“自动发现”

单击“创建发现规则”



该宏{#SITENAME}来自自动发现脚本中的变量{#SITENAME}。
添加完成后:
在这里插入图片描述
进一步添加Items等项。
创建原型Item,单击“监控项原型”


$1代表我们检测出来的URL,web.site.code[{#SITENAME}]中的变量会一次检测这几个URL。
单击“添加”,创建触发器原型,单击“ 创建触发器原型”




可以设置不同梯度的告警。
添加图形。单击“创建图形原型 ”。



单击“添加”,模板创建成功。

添加模板到主机,选择web1主机。数据如下。

好的,我可以给你提供一个基于 FreeRTOS 和 HAL 的控制 LED 灯的示例代码。这个例子中,我们将使用 STM32F4Discovery 开发板上的 LED 灯。该系统将包括任务调度、硬件驱动、定时器和串口通信等功能。 首先,我们需要在 CubeMX 中配置 STM32F4Discovery 开发板,启用 FreeRTOS 和 HAL 库,并配置 LED 灯的 GPIO 引脚。然后,我们可以使用以下示例代码: ```c // 头文件 #include "main.h" #include "cmsis_os.h" // 宏定义 #define LED_GPIO_Port GPIOG #define LED_Pin GPIO_PIN_13 // 句柄定义 osThreadId_t defaultTaskHandle; osThreadId_t ledTaskHandle; osTimerId_t ledTimerHandle; // 函数声明 void SystemClock_Config(void); void MX_GPIO_Init(void); void StartDefaultTask(void *argument); void StartLedTask(void *argument); void LedTimerCallback(void *argument); // main 函数 int main(void) { // 系统初始化 HAL_Init(); SystemClock_Config(); // GPIO 初始化 MX_GPIO_Init(); // 创建任务 osThreadAttr_t defaultTask_attributes = { .name = "DefaultTask", .priority = (osPriority_t)osPriorityNormal, .stack_size = 128 * 4}; defaultTaskHandle = osThreadNew(StartDefaultTask, NULL, &defaultTask_attributes); osThreadAttr_t ledTask_attributes = { .name = "LedTask", .priority = (osPriority_t)osPriorityLow, .stack_size = 128 * 4}; ledTaskHandle = osThreadNew(StartLedTask, NULL, &ledTask_attributes); // 创建定时器 const osTimerAttr_t ledTimer_attributes = { .name = "LedTimer"}; ledTimerHandle = osTimerNew(LedTimerCallback, osTimerPeriodic, NULL, &ledTimer_attributes); // 开始 FreeRTOS 内核调度 osKernelStart(); // 永远不应该运行到这里 while (1) { } } // 默认任务 void StartDefaultTask(void *argument) { // 初始化串口 MX_USART2_UART_Init(); // 发送欢迎消息 char welcomeMsg[] = "Welcome to the LED control system!\r\n"; HAL_UART_Transmit(&huart2, (uint8_t *)welcomeMsg, strlen(welcomeMsg), HAL_MAX_DELAY); // 完成任务 osThreadExit(); } // LED 任务 void StartLedTask(void *argument) { // 初始化 LED 灯状态 HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); // 启动定时器 osTimerStart(ledTimerHandle, 500); // 任务循环 while (1) { // 等待 1 秒钟 osDelay(1000); // 翻转 LED 灯状态 HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); } } // LED 定时器回调函数 void LedTimerCallback(void *argument) { // 翻转 LED 灯状态 HAL_GPIO_TogglePin(LED_GPIO_Port, LED_Pin); } // GPIO 初始化 void MX_GPIO_Init(void) { GPIO_InitTypeDef GPIO_InitStruct = {0}; /* GPIO Ports Clock Enable */ __HAL_RCC_GPIOG_CLK_ENABLE(); /*Configure GPIO pin Output Level */ HAL_GPIO_WritePin(LED_GPIO_Port, LED_Pin, GPIO_PIN_RESET); /*Configure GPIO pin : LED_Pin */ GPIO_InitStruct.Pin = LED_Pin; GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP; GPIO_InitStruct.Pull = GPIO_NOPULL; GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW; HAL_GPIO_Init(LED_GPIO_Port, &GPIO_InitStruct); } // 系统时钟配置 void SystemClock_Config(void) { RCC_OscInitTypeDef RCC_OscInitStruct = {0}; RCC_ClkInitTypeDef RCC_ClkInitStruct = {0}; /** Initializes the RCC Oscillators according to the specified parameters * in the RCC_OscInitTypeDef structure. */ RCC_OscInitStruct.OscillatorType = RCC_OSCILLATORTYPE_HSI; RCC_OscInitStruct.HSIState = RCC_HSI_ON; RCC_OscInitStruct.HSICalibrationValue = RCC_HSICALIBRATION_DEFAULT; RCC_OscInitStruct.PLL.PLLState = RCC_PLL_ON; RCC_OscInitStruct.PLL.PLLSource = RCC_PLLSOURCE_HSI; RCC_OscInitStruct.PLL.PLLM = 8; RCC_OscInitStruct.PLL.PLLN = 168; RCC_OscInitStruct.PLL.PLLP = RCC_PLLP_DIV2; RCC_OscInitStruct.PLL.PLLQ = 4; if (HAL_RCC_OscConfig(&RCC_OscInitStruct) != HAL_OK) { Error_Handler(); } /** Initializes the CPU, AHB and APB buses clocks */ RCC_ClkInitStruct.ClockType = RCC_CLOCKTYPE_HCLK | RCC_CLOCKTYPE_SYSCLK | RCC_CLOCKTYPE_PCLK1 | RCC_CLOCKTYPE_PCLK2; RCC_ClkInitStruct.SYSCLKSource = RCC_SYSCLKSOURCE_PLLCLK; RCC_ClkInitStruct.AHBCLKDivider = RCC_SYSCLK_DIV1; RCC_ClkInitStruct.APB1CLKDivider = RCC_HCLK_DIV4; RCC_ClkInitStruct.APB2CLKDivider = RCC_HCLK_DIV2; if (HAL_RCC_ClockConfig(&RCC_ClkInitStruct, FLASH_LATENCY_5) != HAL_OK) { Error_Handler(); } } ``` 在这个示例代码中,我们创建了两个任务:默认任务和 LED 任务。默认任务初始化串口并发送欢迎消息,而 LED 任务则控制 LED 灯的状态并定期翻转 LED 灯。我们还使用了一个定时器来翻转 LED 灯的状态。 注意,这只是一个简单的示例代码,你需要根据你的具体需求进行修改和扩展。例如,你可以添加更多的任务和定时器,或修改 LED 灯的状态以响应外部事件等等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值