Giter Club home page Giter Club logo

cmdbapi's Introduction

iTop API封装

二次封装iTop API便于调用

数据模型使用 https://github.com/annProg/itop-extensions

参数说明

参数 说明
type ip,app,server,url,domain,default等 (可以在config.php中定义config['map']来映射类型和对应的iTop类)
value 多个值用半角逗号分隔
rankdir dot图形方向, LR或者TB,默认TB
depth relation深度,默认app为1, ip, default等为3
direction 关联方向,up(依赖),down(影响),both(依赖和影响),默认为down
show 控制relation显示的iTop类,逗号分隔
hide 控制relation隐藏的iTop类,逗号分隔
filter 控制objects显示的类型,逗号分隔

示例

使用以下参数调用

public.php?type=ip&value=10.0.0.2&filter=Server&show=Server,Cluster,Rack,ApplicationSolution&direction=both&depth=2

查询IP10.0.0.2的服务器的关联关系,并且objects只显示Server类,relations类显示Server,Cluster,Rack,ApplicationSolution&direction,并且同时显示此服务器的上下游关联,关联深度只显示2级,返回类似如下结果

{
  "relations": {
    "Server::2::op.node.22": [
      {
        "key": "Cluster::3::op1"
      },
      {
        "key": "ApplicationSolution::54::op.appname"
      }
    ],
    "Cluster::3::op1": [
      {
        "key": "ApplicationSolution::53::op.monitor"
      }
    ],
    "Rack::11::土城4F.M1": [
      {
        "key": "Server::2::op.node.22"
      }
    ]
  },
  "objects": {
    "Server::2": {
      "code": 0,
      "message": "",
      "class": "Server",
      "key": "2",
      "fields": {
        "id": "2",
        "friendlyname": "op.node.22"
      }
    }
  },
  "code": 0,
  "message": "Scope: 1; Related objects: Server= 1",
  "imgurl": "http://cmdb.cn/chart/api.php?cht=gv:dot&chl=digraph+G..."
}

图片显示如下

部署方式建议

cmdbApi监听本地端口

server {
	listen      127.0.0.1:8090;
	access_log logs/cmdbapi.log main;
	root /opt/wwwroot/cmdb.xxx.cn/cmdbApi/web;

	include enable-php.conf;

	location / {
		index  index.html index.htm index.php;
	}

	location ~ /\.
	{
		deny all;
	}

}

cmdbApi画图依赖 chart接口,此接口用于将dot源码转换为图片

server {
	listen      127.0.0.1:8091;
	access_log logs/cmdbchart.log main;
	root /opt/wwwroot/cmdb.xxx.cn/chart/;

	include enable-php.conf;

	location / {
		index  index.html index.htm index.php;
	}

	location ~ /\.
	{
		deny all;
	}

}

在cmdb配置文件里做反向代理

upstream graphviz-api {
	server 127.0.0.1:8091;
}

upstream cmdb-pubapi {
	server 127.0.0.1:8090;
}

server {
	listen      80;
	server_name  cmdb.xxx.cn;
	access_log logs/cmdb.xxx.cn.log main;
	root /opt/wwwroot/cmdb.xxx.cn/web;

	include enable-php.conf;

	location / {
		index  index.html index.htm index.php;
	}
	
	location /data/ {
		deny all;
	}
	
	location ^~ /api/ {
		proxy_pass http://cmdb-pubapi/;
		proxy_set_header     X-Forwarded-For $proxy_add_x_forwarded_for;
	}

	location ^~ /chart/ {
		proxy_pass http://graphviz-api/;
	}
	location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
	{
		expires      30d;
	}

	location ~ .*\.(js|css)?$
	{
		expires      12h;
	}

	location ~ /\.
	{
		deny all;
	}

}

cmdbapi's People

Contributors

annprog avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

cmdbapi's Issues

cmdb服务器信息及监控审计

计划使用zabbix

  1. zabbix auto register配置inventory mode为automatic
  2. zabbix 新增user parameter : lld_asset[*],自定义脚本获取assettag(虚拟机为UUID,物理机为serial number), 品牌,型号等
  3. zabbix inventory增加这些信息
  4. 调用itop api,获取cmdb中记录的所有server的盘点号,去查zabbix中是否已经监控,并获取服务器的主机名、assettag、型号等信息,然后将资产信息及监控状态写回itop
  5. 获取zabbix所有机器列表,利用cmdbApi的find.php接口,判断已监控的机器是否录入了cmdb,结果发出邮件。
  6. 4,5两个步骤每天夜里执行一次即可,第二天根据邮件人工处理
  7. itop新建审计类型,审计监控状态
  8. 4,5,两步应提供批量方式和指定assettag方式 (处理完第6步之后,可以手动更新itop审计结果)

服务器账号管理

cmdb中用集群来规划机器,对用户赋予集群权限,或者机器权限
(lnkPersonToServer, lnkPersonToCluster)
api提供接口供机器调用,用来增删账号

patch service失败

maclof/kubernetes-client#27

use strategic-merge-patch+json can not patch service when change service ports

# kubectl --v=7 -n dev patch service app1 --patch '{"spec":{"ports":[{"port":805,"targetPort":805}]}}'
I1119 18:30:55.204013    7361 loader.go:357] Config loaded from file /root/.kube/config
I1119 18:30:55.216967    7361 round_trippers.go:414] GET https://10.112.35.104/api/v1/namespaces/dev/services/app1
I1119 18:30:55.216990    7361 round_trippers.go:421] Request Headers:
I1119 18:30:55.217001    7361 round_trippers.go:424]     Accept: application/json
I1119 18:30:55.217010    7361 round_trippers.go:424]     User-Agent: kubectl/v1.9.5 (linux/amd64) kubernetes/f01a2bf
I1119 18:30:55.243264    7361 round_trippers.go:439] Response Status: 200 OK in 26 milliseconds
I1119 18:30:55.244290    7361 round_trippers.go:414] PATCH https://10.112.35.104/api/v1/namespaces/dev/services/app1
I1119 18:30:55.244311    7361 round_trippers.go:421] Request Headers:
I1119 18:30:55.244322    7361 round_trippers.go:424]     Accept: application/json
I1119 18:30:55.244333    7361 round_trippers.go:424]     Content-Type: application/strategic-merge-patch+json
I1119 18:30:55.244344    7361 round_trippers.go:424]     User-Agent: kubectl/v1.9.5 (linux/amd64) kubernetes/f01a2bf
I1119 18:30:55.247526    7361 round_trippers.go:439] Response Status: 422 Unprocessable Entity in 3 milliseconds
F1119 18:30:55.247793    7361 helpers.go:119] The Service "app1" is invalid: 
* spec.ports[0].name: Required value
* spec.ports[1].name: Required value

use --type merge, Content-Type is Content-Type: application/merge-patch+json, can patch successful.

# kubectl --v=7 -n dev patch service app1 --patch '{"spec":{"ports":[{"port":804,"targetPort":804}]}}' --type merge
I1119 18:28:17.370216    6169 loader.go:357] Config loaded from file /root/.kube/config
I1119 18:28:17.388940    6169 round_trippers.go:414] GET https://10.112.35.104/api/v1/namespaces/dev/services/app1
I1119 18:28:17.388971    6169 round_trippers.go:421] Request Headers:
I1119 18:28:17.388983    6169 round_trippers.go:424]     Accept: application/json
I1119 18:28:17.388994    6169 round_trippers.go:424]     User-Agent: kubectl/v1.9.5 (linux/amd64) kubernetes/f01a2bf
I1119 18:28:17.415048    6169 round_trippers.go:439] Response Status: 200 OK in 26 milliseconds
I1119 18:28:17.416141    6169 round_trippers.go:414] PATCH https://10.112.35.104/api/v1/namespaces/dev/services/app1
I1119 18:28:17.416164    6169 round_trippers.go:421] Request Headers:
I1119 18:28:17.416175    6169 round_trippers.go:424]     Accept: application/json
I1119 18:28:17.416186    6169 round_trippers.go:424]     Content-Type: application/merge-patch+json
I1119 18:28:17.416226    6169 round_trippers.go:424]     User-Agent: kubectl/v1.9.5 (linux/amd64) kubernetes/f01a2bf
I1119 18:28:17.422360    6169 round_trippers.go:439] Response Status: 200 OK in 6 milliseconds
service "app1" patched

so can we make this header configurable?

kubernetes/kubernetes#28225

支持rest-ext filter特性

filter用于输出objects过滤,例如

array("Person","Server"),限制只输出Person和Server类型的对象

link.php优化

  1. 支持隐藏机房
  2. 服务器合并显示(多台服务器合并成一个节点,使图片更加清晰)

node挂掉之后容器迁移时间太长

10:10:31 504
10:11:13 503
10:15:38 404

用了5分钟才迁移(可能是受 kube-controller-manager --pod-eviction-timeout 参数影响: duration The grace period for deleting pods on failed nodes. (default 5m0s)

考虑配置livenessProbe来加快迁移

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.