专注于数据可视化:长期开发,意味着项目需求的不断发展和变化。在此进程之中,有多次的反复,是在否定之中的不断成长,文档是记录这个收获的最好见证。
文章目录
前言
zabbix([`zæbiks])是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。在项目数据可视化的开发过程中,因牵涉的API对接方较多,本文将梳理相关的LOCKDATAV-API对接规范,以便查询。
一、关键基础设施 API
zabbix-API对接数据格式
核心数据字段格式
- name,必须为
华三核心交换机|CPU1使用率|10.52.200.254
,否则将无法筛选同一个设备;华三核心交换机
,是同一个设备必须保持一致的名称; - status:0,正常;1停机;
- triggers:[0].value 和[0].value ,标识停机或暂停状态;
- lastvalue,数值;
{
"itemid": "45880",
"hostid": "10533",
"name": "华三核心交换机|CPU1使用率|10.52.200.254",
"status": "0",
"triggers": [
{
"value": "0",
},
{
"value": "0",
},
{
"value": "0",
}
],
"lastclock": "1670938900",
"lastvalue": "10",
}
lockdatav-API开发记录
1.按设备名称进行数组合并
//01.按照设备名称进行数组合并;
$list = array();
foreach ($dataInfo as $v) {
if (stripos($v["name"], 'CPU') !== false || stripos($v["name"], '内存') !== false || stripos($v["name"], '硬盘守护') !== false || stripos($v["name"], '网口守护') !== false || stripos($v["name"], '存储') !== false || stripos($v["name"], '服务1') !== false || stripos($v["name"], '服务2') !== false) {
$list[explode('|', $v['name'])[0]][] = $v;
}
}
2.筛选键值
$dName = array();
foreach ($dataInfo as $v) {
$key = explode('|', $v['name'])[0];
if (!isset($dName[$key])) {
$dName[$key] = $v['name'];
}
}
//保留唯一值;
$unique = array_values($dName);
$len = count($unique);
// echo explode('|', $unique[2])[0];
//var_dump($unique[2]);
//var_dump($list[explode('|', $unique[2])[0]]);
//$a = $list[explode('|', $unique[0])[0]];
//die(json_encode_lockdata($a));
3.前端数据格式
@$dataInfoNew = array();
for ($n = 0; $n < $len; $n++) {
$dataInfoNew[$n] = makeZabArr($list[explode('|', $unique[$n])[0]], $quota);
}
//echo "<pre>";
//die(json_encode_lockdata($dataInfoNew));
@$listArr = array();
foreach ($dataInfoNew as $k => $v) {
if (array_key_exists("name", $dataInfoNew[$k])) {
$listArr[] = $v;
}
}
4.将数据总条数入库
$len1 = count($listArr);
$row = $db->fetch('basics', 'group_id,total', array('group_id' => $hostids), ' id DESC');
if (!$row) {
$db->insert('basics', array('group_id' => $hostids, 'total' => $len1));
} else {
$db->update('basics', array('total' => $len1), 'group_id=' . $hostids);
}
二、zabbix获取itermid
1.zabbix-API对接数据格式
- 由于系统需要支持用户名称、归属区域和设备别名的模糊查询,在后台添加设备的时候,必须添加对应的tags字段;
"tags": [
{
"tag": "微信",
"value": "c3e42012-621c-4948-8e3e-721defb7d6e9"
},
{
"tag": "用户名称",
"value": "客户大华"
},
{
"tag": "联系电话",
"value": "刘先生 1333333"
},
{
"tag": "设备归属",
"value": "关键基础设施"
},
{
"tag": "归属区域",
"value": "中心机房"
},
{
"tag": "设备别名",
"value": "华三核心交换机"
}
]
2.lockdatav-API开发记录
function getItem()
{
$hostids = get_param('hostids');
$name = get_param('name');
$keys = get_param('keys');
$district = get_param('district');
$groupid = array(
"jsonrpc" => "2.0",
"method" => "item.get",
"params" => array(
"output" => "extend",
"sortfield" => ["itemid"],
"search" => [
"name" => $name
],
"hostids" => $hostids, # 指定主机id,数组或者单个id
"with_triggers" => True,
"tags" => array(
[
"tag" => "设备归属",
"value" => $keys,
],
[
"tag" => "归属区域",
"value" => $district,
]
),
"selectItemDiscovery" => "extend",
"selectHosts" => "extend",
"selectTriggers" => "extend",
"selectTags" => "extend"
),
"auth" => $this->getZabToken(),
"id" => 1
);
$data = json_encode_lockdata($groupid);
$result = getZabbix($this->url, $data);
$groupinfo = $result->result;
$groupid = object_array($groupinfo);
die(json_encode_lockdata($groupid));
}
三、XSS漏洞过滤
新增httpOnly标识
SetCookie("dbUser", $row["user_name"], time() + 604800, "/", '', '', TRUE);
SetCookie("member_id", $row["member_id"], time() + 604800, "/", '', '', TRUE);
SetCookie("user_main", $row["user_main"], time() + 604800, "/", '', '', TRUE);
SetCookie("dbUser_id", $row["user_id"], time() + 604800, "/", '', '', TRUE);
四、爬虫数据参数传递
json_encode将数组转为json字符串
//筛选参数
$group_data = array("group_id" => $data, 'start_time' => $start_time, 'end_time' => $end_time);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($group_data));
总结
@lockdata.cn