Commit 4c230cff by see.liuh@gmail.com

------------

1. 错别字修改,ansible的脚本叫playbook不是playback
2. 增加4.4 4.5自定义监测项相关说明
3. 增加vproc使用方法和原理。vproc脚本源码在awesome_script/vproc/vproc.py
4. 离线安装包更新,增加了vaserver的几个自定义监控项:

- 增加zabbix_agent_proxy_tx1/bin/vproc 。
- zabbix_agent_proxy_tx1/etc/zabbix_agentd.conf和zabbix_agent_proxy_tx1/etc/zabbix_agentd.conf.d更新

5. 增加zabbix监控模板:
smb://192.168.9.1/公共模块/繁星/繁星二代/自检系统/zabbix_template
。新部署的zabbix将模板导入即可
1 parent 05947704
{
"python.pythonPath": "/usr/bin/python"
}
\ No newline at end of file
# ansible_playback
存放自己写好的ansible playback文件。需要在当前文件添加文档,简述用法和注意事项
## playback1
说明...
\ No newline at end of file
# ansible_playbook
存放自己写好的ansible playbook文件。需要在当前文件添加文档,简述用法和注意事项
## playbook1
说明...
\ No newline at end of file
......@@ -2,7 +2,10 @@
跟运维相关的好脚本,分享一下吧。
## script1
## vproc
说明...
脚本说明见文档中vproc章节。
在设备上运行时将vproc.py改名vproc, 应用程序中会执行vproc脚本
vproc_testcase.py是简单的单元测试
#!/usr/bin/python
# encoding:utf-8
#######################################################
# author: liuh 2018-10-24
# version: v1.0
# copy to device /usr/local/bin/vproc
#######################################################
import sys
import getopt
import os
import shutil
#######################config#####################
ROOT_PATH="/root/UserApp/vproc"
##################################################
def usage():
print("""
useage: vproc command [options]
there are vproc commands:
read read a key's value
write write a key's value
clean remove group of items
write command options:
[+]-k any, --key=any | status item key.
[+]-v any, --value=any | status item value.
example:
vproc write --key=vaserver.va0.cameraname --value=camera1
vproc write --key=vaserver.va0.playok --value=1
read command options:
[+]-k any, --key=any | status item key.
example:
vproc read --key=vaserver.va0.cameraname
if executed write command example, it would be print camera1
clean command options:
[+]-p any, --path=any | the items's group key path
example:
vproc clean --path=vaserver.va0
if executed write command example, the dir:VPROC_ROOT/vaserver/va0 would be remove.
""")
def write_single_status(key, value):
paths = key.split('.')
paths_len = len(paths)
if(paths_len<2):
print("invalid key path, must be greater than 2 level")
sys.exit(-1)
if(paths_len>50):
print("invalid key path, level too deep")
sys.exit(-1)
fullpath = ROOT_PATH
for path in (paths[:-1]):
fullpath = fullpath+ "/" + path
if not os.path.exists(fullpath):
os.makedirs(fullpath)
fullpath = fullpath+"/"+paths[-1]
with open(fullpath, 'w') as f:
f.write(value)
def read_single_status(key):
paths = key.split('.')
paths_len = len(paths)
if(paths_len<2):
print("invalid key path, must be greater than 2 level")
sys.exit(-1)
fullpath = ROOT_PATH
for path in paths:
fullpath = fullpath+ "/" + path
if not os.path.exists(fullpath):
return ""
str=""
with open(fullpath, 'r') as f:
strs=f.readlines()
if(len(strs)>0):
str = strs[0]
return str
def remove_items(key_path):
paths = key_path.split('.')
paths_len = len(paths)
if(paths_len<1):
print("invalid key path, must be greater than 1 level")
sys.exit(-1)
fullpath = ROOT_PATH
for path in paths:
fullpath = fullpath+ "/" + path
if(os.path.exists(fullpath)):
if(os.path.isfile(fullpath)):
os.remove(fullpath)
# print("remove {}".format(fullpath))
if(os.path.isdir(fullpath)):
shutil.rmtree(fullpath)
# print("rmdir {}".format(fullpath))
else:
print("no suck file or dir: {}".format(fullpath))
def main():
argc = len(sys.argv)
if argc < 3 or (sys.argv[1]!= "read" and sys.argv[1]!= "write" and sys.argv[1]!= "clean"):
usage()
sys.exit(-1)
try:
options,args = getopt.getopt(sys.argv[2:],"-h-k:-v:-p:",["help","key=","value=", "path="])
except getopt.GetoptError:
print("error: invalid args")
sys.exit(-1)
keys=[]
values=[]
key_path=[]
if(sys.argv[1] == "write"):
for name,value in options:
if name in ("-h","--help"):
usage()
if name in ("-k","--key"):
keys.append(value)
if name in ("-v","--value"):
values.append(value)
keys_len = len(keys)
values_len = len(values)
if keys_len != values_len:
print("invalid args, keys count is {}, values count is {}".format(keys_len, values_len))
sys.exit(-1)
for index in range(len(keys)):
write_single_status(keys[index], values[index])
sys.exit(0)
if(sys.argv[1] == "read"):
for name,value in options:
if name in ("-h","--help"):
usage()
if name in ("-k","--key"):
keys.append(value)
if name in ("-v","--value"):
values.append(value)
for index in range(len(keys)):
readvalue = read_single_status(keys[index])
if(len(values)>0):
if(index < len(values)-1):
defaultvalue = values[index]
else:
defaultvalue = values[0]
if(readvalue == "" and len(values)>0):
print(defaultvalue)
else:
print(readvalue)
sys.exit(0)
if(sys.argv[1] == "clean"):
for name,value in options:
if name in ("-h","--help"):
usage()
if name in ("-p","--path"):
key_path.append(value)
for index in range(len(key_path)):
remove_items(key_path[index])
sys.exit(0)
if __name__ == '__main__':
main()
import os
print("--------------------testcase write value-------------------")
res = os.popen("python vproc write --key=vaserver.va0.cameraname --value=name1").read();
print(res)
print("--------------------testcase read value-------------------")
res = os.popen("python vproc read --key=vaserver.va0.cameraname").read();
print(res)
print("--------------------testcase help, shoud print 3 times-------------------")
res = os.popen("python vproc --help").read();
print(res)
res = os.popen("python vproc read").read();
print(res)
res = os.popen("python vproc").read();
print(res)
print("--------------------testcase read value, shoud print null-------------------")
res = os.popen("python vproc read --key=vaserver.lalalal").read();
print(res)
print("--------------------testcase read value, shoud print invalid args 2 times-------------------")
res = os.popen("python vproc write --key=vaserver --value=123").read();
print(res)
res = os.popen("python vproc write --key=vaserver.fffff ").read();
print(res)
print("--------------------testcase remove items-------------------")
res = os.popen("python vproc clean --path=vaserver.va0 ").read();
print(res)
......@@ -3,7 +3,7 @@ ansible集群管理工具
离线安装包: smb://192.168.9.1/公共模块/繁星/繁星二代/自检系统/ansible_offline_tx1
playback实例在 ansible_playback_example 目录。
playbook实例在 ansible_playbook_example 目录。
在繁星中增加ansible,作为集群管理工具。ansible工作的流程是,读取/etc/ansible/hosts主机列表,批量的、自动的使用ssh远程到主机上执行指令,我们可以用它获得子节点的状态,批量配置、更新程序
......@@ -12,7 +12,7 @@ playback实例在 ansible_playback_example 目录。
1. 写python或shell脚本,在脚本中编写复杂的指令组合,利用ansible的command模块将脚本和所需文件上传、执行。--此方法学习成本低,易上手。初级使用方法
2. 使用ansible提供的module+playback。 module相当于shell命令(copy/ls/ps/apt-get等等),playback相当于shell脚本,将module组合执行。 --此方法需要需要学习各module的功能和参数,playback语法(yml),优点是反馈更清晰,流程掌控更好,playback比shell和python好写些。
2. 使用ansible提供的module+playbook。 module相当于shell命令(copy/ls/ps/apt-get等等),playbook相当于shell脚本,将module组合执行。 --此方法需要需要学习各module的功能和参数,playbook语法(yml),优点是反馈更清晰,流程掌控更好,playbook比shell和python好写些。
3. 编写python脚本,使用ansible-api。 --此方法最高级,我能想到的需要使用此方法的应用途径:需要解析反馈信息并根据反馈做出不同反应;需要在自己的服务中利用ansible实现批量控制功能,比如批量升级服务,需要将各子节点升级进度,升级状态,错误信息反馈到web。
......@@ -102,9 +102,9 @@ playback实例在 ansible_playback_example 目录。
`ansible starnet -m command -a "bash /home/ubuntu/ansible_offline_tx1/install.sh"`
以上两条指令结合,可满足大部分需求。
- playback方式
- playbook方式
playback文件内容:
playbook文件内容:
.. code-block:: shell
......@@ -124,11 +124,11 @@ playback文件内容:
保存 ansible_offline_tx1.yml
执行playback
执行playbook
.. code-block:: shell
ansible-playback ansible_offline_tx1.yml
ansible-playbook ansible_offline_tx1.yml
ansible提供了非常多的module,常用模块使用方法:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_032_ansible02.html。
......
......@@ -16,7 +16,7 @@ filebeat使用源码放在主机上编译。 elk三个工程使用官方下载
filebeat编译安装参考:
https://blog.csdn.net/lk142500/article/details/7953584
https://blog.csdn.net/lk142500/article/details/79535849
ubuntu14安装golang1.10:
......
......@@ -171,3 +171,158 @@ Dashboard可以浏览状态、报警等,Edit dashboard可以自定义。比如
这是最基本的使用,后续添加如何自定义监测项,利用api批量添加主机、动态管理监测项等功能。
模板
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
繁星2代模板已放在sdv上 smb://192.168.9.1/公共模块/繁星/繁星二代/自检系统/zabbix_template
自定义监测项
-------------------------------------------------
zabbix的监测项有两种:
1. 上报型
zabbix item type选择 traper。需配合zabbix_sender使用
2. 查询型
zabbix item type选择 agent
如果没有特殊需求,均采用查询型,走vproc流程。
应用程序使用vproc将状态写到文件,zabbix_agentd用vproc查询各状态的值,采用这种方式的原因:
- zabbix的交互压力可控,查询频率在web上配一下就好了。
- 应用程序写状态的操作与zabbix解耦。即使没有zabbix,我们在调试程序时也可以使用vproc,可以用命令行查询检测项的值。有助于调试
vproc后面章节有详细介绍
繁星增加自定义监测项典型流程
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
细节可以自行百度“zabbix增加自定义item”
界面上操作可参考:https://blog.csdn.net/u012062455/article/details/53257059
zabbix_agentd端操作可参考:https://www.cnblogs.com/mingerlcm/p/7754076.html
以繁星2代为例。假设我们要在slave模板中增加vaserver的“进程号”、“是否授权”两个监测项。
1. 在zabbix web端增加检测项
监测项是添加到模板中的,添加后所有使用该模板的主机均生效,修改starnet_tx1_slave_tp模板
- 点击Configuration->Template 。
- 点击starnet_tx1_slave_tp行的items。
- 点右上角的Create item
- 填写具体信息并保存
2. 在zabbix_agentd端配置
- 确保/usr/local/etc/zabbix_agentd.conf中有配置
.. code-block:: shell
UnsafeUserParameters=1
Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
- 在/usr/local/etc/zabbix_agentd.conf.d/vaserver.conf增加命令行,如果没有可新建文件
.. code-block:: shell
# UserParameter=后面是key值,必须跟web上配置的相同。逗号后面的是查询这个值所执行的指令。
# 进程号很简单,shell命令就能搞定
UserParameter=vaserver.pid,pgrep VAServer
# license状态是需要应用程序开发者写入到vproc系统中(/root/UserApp/vproc/vaserver/license文件内容)的。在这里用vproc工具进行查询。如果没查到,返回0
UserParameter=vaserver.license,vproc read --key=vaserver.license --value=0
3. 重启zabbix_agentd。过一会在web上就能看到了。
vproc
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vproc是python编写的工具
类似linux proc系统,应用程序调用vproc脚本将监测项状态值持续更新到指定文件中。外部可读取文件值,得知应用程序的运行情况。
vproc工具有3种用法。
- 写:
.. code-block:: shell
# 此命令将创建文件 ROOT_VPROC/app/group1/group2/item,文件内容为value1
./vproc write --key=app.group1.gourp2.item --value=value1
- 读:
.. code-block:: shell
# 将ROOT_VPROC/app/group1/group2/item文件内容打印出来
./vproc read --key=app.group1.gourp2.item
- 重置:
.. code-block:: shell
# 删除ROOT_VPROC/app/group1/目录。相当于重置状态值
./vproc clean --path=app.group1
所有key值均采用 app.[group1.gourp2...groupn].item方式组织。末端item为文件,记录监测项的值,前面是多级目录。比如key值vaserver.va0.cameraname,记录状态值的文件为VPORC_ROOT/vaserver/va0/cameraname。
单个监测项更新状态频率不宜过快。建议间隔时间1分钟以上
**注意**: 建议在程序(以及能代表一组的流程)启动时、关闭时重置状态,**避免旧的状态值干扰**。拿vaserver举例:
有vaserver.event_count(发出了多少事件) ; vaserver.va0.taskname(分析通道0的任务名称); vaserver.va1.taskname
vaserver启动和退出时应调用
.. code-block:: shell
./vproc clean --path=vaserver
vaserver启动、关闭一个va时(假设是编号0)应调用
.. code-block:: shell
./vproc clean --path=vaserver.va0
自定义监测项列表
-------------------------------------------------
VAServer
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+------------------------------------+-------+----------------------------------------+
| key | 类型 | 说明 |
+====================================+=======+========================================+
| vaserver.va0.taskname | Text | 任务名称 |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.taskid | Text | 任务id |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.cameraname | Text | 相机名称 |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.cameraid | Text | 相机id |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.playok | int | 是否点播成功,实际接收到流后再更新状态 |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.sendresultcount | int | 对外发送了多少条结果,1分钟更新一次 |
+------------------------------------+-------+----------------------------------------+
| vaserver.va[1...n].bigtaskname | 同va0 | 同va0 |
| | | |
| ... | | |
| | | |
| vaserver.va[1...n].sendresultcount | | |
+------------------------------------+-------+----------------------------------------+
| vaserver.license | int | 授权状态,check license后更新 |
+------------------------------------+-------+----------------------------------------+
修订历史
================
2018.10.24
------------
1. 错别字修改,ansible的脚本叫playbook不是playback
2. 增加4.4 4.5自定义监测项相关说明
3. 增加vproc使用方法和原理。vproc脚本源码在awesome_script/vproc/vproc.py
4. 离线安装包更新,增加了vaserver的几个自定义监控项:
- 增加zabbix_agent_proxy_tx1/bin/vproc 。
- zabbix_agent_proxy_tx1/etc/zabbix_agentd.conf和zabbix_agent_proxy_tx1/etc/zabbix_agentd.conf.d更新
5. 增加zabbix监控模板: smb://192.168.9.1/公共模块/繁星/繁星二代/自检系统/zabbix_template 。新部署的zabbix将模板导入即可
2018.10.17
------------
......
......@@ -161,12 +161,12 @@
<div class="section" id="ansible">
<h1>2. ansible集群管理工具<a class="headerlink" href="#ansible" title="Permalink to this headline"></a></h1>
<p>离线安装包: <a class="reference external" href="smb://192.168.9.1">smb://192.168.9.1</a>/公共模块/繁星/繁星二代/自检系统/ansible_offline_tx1</p>
<p>playback实例在 ansible_playback_example 目录。</p>
<p>playbook实例在 ansible_playbook_example 目录。</p>
<p>在繁星中增加ansible,作为集群管理工具。ansible工作的流程是,读取/etc/ansible/hosts主机列表,批量的、自动的使用ssh远程到主机上执行指令,我们可以用它获得子节点的状态,批量配置、更新程序</p>
<p>我们有三种使用方法:</p>
<ol class="arabic simple">
<li>写python或shell脚本,在脚本中编写复杂的指令组合,利用ansible的command模块将脚本和所需文件上传、执行。–此方法学习成本低,易上手。初级使用方法</li>
<li>使用ansible提供的module+playback。 module相当于shell命令(copy/ls/ps/apt-get等等),playback相当于shell脚本,将module组合执行。 –此方法需要需要学习各module的功能和参数,playback语法(yml),优点是反馈更清晰,流程掌控更好,playback比shell和python好写些。</li>
<li>使用ansible提供的module+playbook。 module相当于shell命令(copy/ls/ps/apt-get等等),playbook相当于shell脚本,将module组合执行。 –此方法需要需要学习各module的功能和参数,playbook语法(yml),优点是反馈更清晰,流程掌控更好,playbook比shell和python好写些。</li>
<li>编写python脚本,使用ansible-api。 –此方法最高级,我能想到的需要使用此方法的应用途径:需要解析反馈信息并根据反馈做出不同反应;需要在自己的服务中利用ansible实现批量控制功能,比如批量升级服务,需要将各子节点升级进度,升级状态,错误信息反馈到web。</li>
</ol>
<p>中文说明文档:<a class="reference external" href="http://www.ansible.com.cn/docs/">http://www.ansible.com.cn/docs/</a></p>
......@@ -240,9 +240,9 @@ ansible all -m ping
</pre></div>
</div>
<ul class="simple">
<li>playback方式</li>
<li>playbook方式</li>
</ul>
<p>playback文件内容:</p>
<p>playbook文件内容:</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>---
- hosts: starnet
sudo: yes
......@@ -259,8 +259,8 @@ ansible all -m ping
</pre></div>
</div>
<p>保存 ansible_offline_tx1.yml</p>
<p>执行playback</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>ansible-playback ansible_offline_tx1.yml
<p>执行playbook</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>ansible-playbook ansible_offline_tx1.yml
</pre></div>
</div>
<p>ansible提供了非常多的module,常用模块使用方法:<a class="reference external" href="https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_032_ansible02.html">https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_032_ansible02.html</a></p>
......
......@@ -178,7 +178,7 @@
<p>filebeat使用源码放在主机上编译。 elk三个工程使用官方下载的tar.gz的包。都是java程序,直接就能运行。</p>
<p>繁星2代已编译好filebeat,其他平台需按照下面步骤编译:</p>
<p>filebeat编译安装参考:</p>
<p><a class="reference external" href="https://blog.csdn.net/lk142500/article/details/7953584">https://blog.csdn.net/lk142500/article/details/7953584</a></p>
<p><a class="reference external" href="https://blog.csdn.net/lk142500/article/details/79535849">https://blog.csdn.net/lk142500/article/details/79535849</a></p>
<p>ubuntu14安装golang1.10:</p>
<p><a class="reference external" href="https://www.cnblogs.com/senlinyang/p/8777384.html">https://www.cnblogs.com/senlinyang/p/8777384.html</a></p>
</div>
......
......@@ -101,6 +101,16 @@
</li>
<li class="toctree-l2"><a class="reference internal" href="#id6">4.3. 使用</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#quick-start">4.3.1. quick start</a></li>
<li class="toctree-l3"><a class="reference internal" href="#id7">4.3.2. 模板</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id8">4.4. 自定义监测项</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#id9">4.4.1. 繁星增加自定义监测项典型流程</a></li>
<li class="toctree-l3"><a class="reference internal" href="#vproc">4.4.2. vproc</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="#id10">4.5. 自定义监测项列表</a><ul>
<li class="toctree-l3"><a class="reference internal" href="#vaserver">4.5.1. VAServer</a></li>
</ul>
</li>
</ul>
......@@ -297,6 +307,164 @@ info from server: <span class="s2">&quot;processed: 0; failed: 1; total: 1; seco
<img alt="_images/zabbix-07.png" src="_images/zabbix-07.png" />
<p>这是最基本的使用,后续添加如何自定义监测项,利用api批量添加主机、动态管理监测项等功能。</p>
</div>
<div class="section" id="id7">
<h3>4.3.2. 模板<a class="headerlink" href="#id7" title="Permalink to this headline"></a></h3>
<p>繁星2代模板已放在sdv上 <a class="reference external" href="smb://192.168.9.1">smb://192.168.9.1</a>/公共模块/繁星/繁星二代/自检系统/zabbix_template</p>
</div>
</div>
<div class="section" id="id8">
<h2>4.4. 自定义监测项<a class="headerlink" href="#id8" title="Permalink to this headline"></a></h2>
<p>zabbix的监测项有两种:</p>
<ol class="arabic simple">
<li>上报型</li>
</ol>
<p>zabbix item type选择 traper。需配合zabbix_sender使用</p>
<ol class="arabic simple" start="2">
<li>查询型</li>
</ol>
<p>zabbix item type选择 agent</p>
<p>如果没有特殊需求,均采用查询型,走vproc流程。</p>
<p>应用程序使用vproc将状态写到文件,zabbix_agentd用vproc查询各状态的值,采用这种方式的原因:</p>
<ul class="simple">
<li>zabbix的交互压力可控,查询频率在web上配一下就好了。</li>
<li>应用程序写状态的操作与zabbix解耦。即使没有zabbix,我们在调试程序时也可以使用vproc,可以用命令行查询检测项的值。有助于调试</li>
</ul>
<p>vproc后面章节有详细介绍</p>
<div class="section" id="id9">
<h3>4.4.1. 繁星增加自定义监测项典型流程<a class="headerlink" href="#id9" title="Permalink to this headline"></a></h3>
<p>细节可以自行百度“zabbix增加自定义item”</p>
<p>界面上操作可参考:<a class="reference external" href="https://blog.csdn.net/u012062455/article/details/53257059">https://blog.csdn.net/u012062455/article/details/53257059</a></p>
<p>zabbix_agentd端操作可参考:<a class="reference external" href="https://www.cnblogs.com/mingerlcm/p/7754076.html">https://www.cnblogs.com/mingerlcm/p/7754076.html</a></p>
<p>以繁星2代为例。假设我们要在slave模板中增加vaserver的“进程号”、“是否授权”两个监测项。</p>
<ol class="arabic simple">
<li>在zabbix web端增加检测项</li>
</ol>
<p>监测项是添加到模板中的,添加后所有使用该模板的主机均生效,修改starnet_tx1_slave_tp模板</p>
<ul class="simple">
<li>点击Configuration-&gt;Template 。</li>
<li>点击starnet_tx1_slave_tp行的items。</li>
<li>点右上角的Create item</li>
<li>填写具体信息并保存</li>
</ul>
<ol class="arabic simple" start="2">
<li>在zabbix_agentd端配置</li>
</ol>
<ul class="simple">
<li>确保/usr/local/etc/zabbix_agentd.conf中有配置</li>
</ul>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="nv">UnsafeUserParameters</span><span class="o">=</span><span class="m">1</span>
<span class="nv">Include</span><span class="o">=</span>/usr/local/etc/zabbix_agentd.conf.d/*.conf
</pre></div>
</div>
<ul class="simple">
<li>在/usr/local/etc/zabbix_agentd.conf.d/vaserver.conf增加命令行,如果没有可新建文件</li>
</ul>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># UserParameter=后面是key值,必须跟web上配置的相同。逗号后面的是查询这个值所执行的指令。</span>
<span class="c1"># 进程号很简单,shell命令就能搞定</span>
<span class="nv">UserParameter</span><span class="o">=</span>vaserver.pid,pgrep VAServer
<span class="c1"># license状态是需要应用程序开发者写入到vproc系统中(/root/UserApp/vproc/vaserver/license文件内容)的。在这里用vproc工具进行查询。如果没查到,返回0</span>
<span class="nv">UserParameter</span><span class="o">=</span>vaserver.license,vproc <span class="nb">read</span> --key<span class="o">=</span>vaserver.license --value<span class="o">=</span><span class="m">0</span>
</pre></div>
</div>
<ol class="arabic simple" start="3">
<li>重启zabbix_agentd。过一会在web上就能看到了。</li>
</ol>
</div>
<div class="section" id="vproc">
<h3>4.4.2. vproc<a class="headerlink" href="#vproc" title="Permalink to this headline"></a></h3>
<p>vproc是python编写的工具</p>
<p>类似linux proc系统,应用程序调用vproc脚本将监测项状态值持续更新到指定文件中。外部可读取文件值,得知应用程序的运行情况。</p>
<p>vproc工具有3种用法。</p>
<ul class="simple">
<li>写:</li>
</ul>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># 此命令将创建文件 ROOT_VPROC/app/group1/group2/item,文件内容为value1</span>
./vproc write --key<span class="o">=</span>app.group1.gourp2.item --value<span class="o">=</span>value1
</pre></div>
</div>
<ul class="simple">
<li>读:</li>
</ul>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># 将ROOT_VPROC/app/group1/group2/item文件内容打印出来</span>
./vproc <span class="nb">read</span> --key<span class="o">=</span>app.group1.gourp2.item
</pre></div>
</div>
<ul class="simple">
<li>重置:</li>
</ul>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span><span class="c1"># 删除ROOT_VPROC/app/group1/目录。相当于重置状态值</span>
./vproc clean --path<span class="o">=</span>app.group1
</pre></div>
</div>
<p>所有key值均采用 app.[group1.gourp2…groupn].item方式组织。末端item为文件,记录监测项的值,前面是多级目录。比如key值vaserver.va0.cameraname,记录状态值的文件为VPORC_ROOT/vaserver/va0/cameraname。</p>
<p>单个监测项更新状态频率不宜过快。建议间隔时间1分钟以上</p>
<p><strong>注意</strong>: 建议在程序(以及能代表一组的流程)启动时、关闭时重置状态,<strong>避免旧的状态值干扰</strong>。拿vaserver举例:</p>
<p>有vaserver.event_count(发出了多少事件) ; vaserver.va0.taskname(分析通道0的任务名称); vaserver.va1.taskname</p>
<p>vaserver启动和退出时应调用</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>./vproc clean --path<span class="o">=</span>vaserver
</pre></div>
</div>
<p>vaserver启动、关闭一个va时(假设是编号0)应调用</p>
<div class="highlight-shell notranslate"><div class="highlight"><pre><span></span>./vproc clean --path<span class="o">=</span>vaserver.va0
</pre></div>
</div>
</div>
</div>
<div class="section" id="id10">
<h2>4.5. 自定义监测项列表<a class="headerlink" href="#id10" title="Permalink to this headline"></a></h2>
<div class="section" id="vaserver">
<h3>4.5.1. VAServer<a class="headerlink" href="#vaserver" title="Permalink to this headline"></a></h3>
<table border="1" class="docutils">
<colgroup>
<col width="43%" />
<col width="8%" />
<col width="48%" />
</colgroup>
<thead valign="bottom">
<tr class="row-odd"><th class="head">key</th>
<th class="head">类型</th>
<th class="head">说明</th>
</tr>
</thead>
<tbody valign="top">
<tr class="row-even"><td>vaserver.va0.taskname</td>
<td>Text</td>
<td>任务名称</td>
</tr>
<tr class="row-odd"><td>vaserver.va0.taskid</td>
<td>Text</td>
<td>任务id</td>
</tr>
<tr class="row-even"><td>vaserver.va0.cameraname</td>
<td>Text</td>
<td>相机名称</td>
</tr>
<tr class="row-odd"><td>vaserver.va0.cameraid</td>
<td>Text</td>
<td>相机id</td>
</tr>
<tr class="row-even"><td>vaserver.va0.playok</td>
<td>int</td>
<td>是否点播成功,实际接收到流后再更新状态</td>
</tr>
<tr class="row-odd"><td>vaserver.va0.sendresultcount</td>
<td>int</td>
<td>对外发送了多少条结果,1分钟更新一次</td>
</tr>
<tr class="row-even"><td><p class="first">vaserver.va[1…n].bigtaskname</p>
<p></p>
<p class="last">vaserver.va[1…n].sendresultcount</p>
</td>
<td>同va0</td>
<td>同va0</td>
</tr>
<tr class="row-odd"><td>vaserver.license</td>
<td>int</td>
<td>授权状态,check license后更新</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
......
......@@ -88,9 +88,10 @@
<li class="toctree-l1"><a class="reference internal" href="30-elk.html">3. elk日志系统</a></li>
<li class="toctree-l1"><a class="reference internal" href="40-zabbix.html">4. zabbix监测系统</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">5. 修订历史</a><ul>
<li class="toctree-l2"><a class="reference internal" href="#id2">5.1. 2018.10.17</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">5.2. 2018.10.10</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">5.3. 2018.10.09</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id2">5.1. 2018.10.24</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id3">5.2. 2018.10.17</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id4">5.3. 2018.10.10</a></li>
<li class="toctree-l2"><a class="reference internal" href="#id5">5.4. 2018.10.09</a></li>
</ul>
</li>
</ul>
......@@ -160,20 +161,36 @@
<div class="section" id="id1">
<h1>5. 修订历史<a class="headerlink" href="#id1" title="Permalink to this headline"></a></h1>
<div class="section" id="id2">
<h2>5.1. 2018.10.17<a class="headerlink" href="#id2" title="Permalink to this headline"></a></h2>
<h2>5.1. 2018.10.24<a class="headerlink" href="#id2" title="Permalink to this headline"></a></h2>
<ol class="arabic simple">
<li>错别字修改,ansible的脚本叫playbook不是playback</li>
<li>增加4.4 4.5自定义监测项相关说明</li>
<li>增加vproc使用方法和原理</li>
<li>离线安装包更新,增加了vaserver的几个自定义监控项:</li>
</ol>
<ul class="simple">
<li>增加zabbix_agent_proxy_tx1/bin/vproc 。</li>
<li>zabbix_agent_proxy_tx1/etc/zabbix_agentd.conf和zabbix_agent_proxy_tx1/etc/zabbix_agentd.conf.d更新</li>
</ul>
<ol class="arabic simple" start="5">
<li>增加zabbix监控模板: <a class="reference external" href="smb://192.168.9.1">smb://192.168.9.1</a>/公共模块/繁星/繁星二代/自检系统/zabbix_template 。新部署的zabbix将模板导入即可</li>
</ol>
</div>
<div class="section" id="id3">
<h2>5.2. 2018.10.17<a class="headerlink" href="#id3" title="Permalink to this headline"></a></h2>
<ol class="arabic simple">
<li>zabbix agent和proxy配置文件增加 AllowRoot=1,使其可以用root账户运行</li>
<li>错别字修改,watchman改成watchmen,明明是想用DC漫画的watchmen :)</li>
</ol>
</div>
<div class="section" id="id3">
<h2>5.2. 2018.10.10<a class="headerlink" href="#id3" title="Permalink to this headline"></a></h2>
<div class="section" id="id4">
<h2>5.3. 2018.10.10<a class="headerlink" href="#id4" title="Permalink to this headline"></a></h2>
<ol class="arabic simple">
<li>修改了zabbix_agent安装方法。由deb包安装改成编译安装。deb版本较低,一些定义好的item不支持。改成3.4版本源码编译的,与zabbix_proxy一起安装</li>
</ol>
</div>
<div class="section" id="id4">
<h2>5.3. 2018.10.09<a class="headerlink" href="#id4" title="Permalink to this headline"></a></h2>
<div class="section" id="id5">
<h2>5.4. 2018.10.09<a class="headerlink" href="#id5" title="Permalink to this headline"></a></h2>
<ol class="arabic simple">
<li>新建文档,增加了watchmen各组件最基本的安装、配置、quickstart文档</li>
</ol>
......
......@@ -3,7 +3,7 @@ ansible集群管理工具
离线安装包: smb://192.168.9.1/公共模块/繁星/繁星二代/自检系统/ansible_offline_tx1
playback实例在 ansible_playback_example 目录。
playbook实例在 ansible_playbook_example 目录。
在繁星中增加ansible,作为集群管理工具。ansible工作的流程是,读取/etc/ansible/hosts主机列表,批量的、自动的使用ssh远程到主机上执行指令,我们可以用它获得子节点的状态,批量配置、更新程序
......@@ -12,7 +12,7 @@ playback实例在 ansible_playback_example 目录。
1. 写python或shell脚本,在脚本中编写复杂的指令组合,利用ansible的command模块将脚本和所需文件上传、执行。--此方法学习成本低,易上手。初级使用方法
2. 使用ansible提供的module+playback。 module相当于shell命令(copy/ls/ps/apt-get等等),playback相当于shell脚本,将module组合执行。 --此方法需要需要学习各module的功能和参数,playback语法(yml),优点是反馈更清晰,流程掌控更好,playback比shell和python好写些。
2. 使用ansible提供的module+playbook。 module相当于shell命令(copy/ls/ps/apt-get等等),playbook相当于shell脚本,将module组合执行。 --此方法需要需要学习各module的功能和参数,playbook语法(yml),优点是反馈更清晰,流程掌控更好,playbook比shell和python好写些。
3. 编写python脚本,使用ansible-api。 --此方法最高级,我能想到的需要使用此方法的应用途径:需要解析反馈信息并根据反馈做出不同反应;需要在自己的服务中利用ansible实现批量控制功能,比如批量升级服务,需要将各子节点升级进度,升级状态,错误信息反馈到web。
......@@ -102,9 +102,9 @@ playback实例在 ansible_playback_example 目录。
`ansible starnet -m command -a "bash /home/ubuntu/ansible_offline_tx1/install.sh"`
以上两条指令结合,可满足大部分需求。
- playback方式
- playbook方式
playback文件内容:
playbook文件内容:
.. code-block:: shell
......@@ -124,11 +124,11 @@ playback文件内容:
保存 ansible_offline_tx1.yml
执行playback
执行playbook
.. code-block:: shell
ansible-playback ansible_offline_tx1.yml
ansible-playbook ansible_offline_tx1.yml
ansible提供了非常多的module,常用模块使用方法:https://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_linux_032_ansible02.html。
......
......@@ -16,7 +16,7 @@ filebeat使用源码放在主机上编译。 elk三个工程使用官方下载
filebeat编译安装参考:
https://blog.csdn.net/lk142500/article/details/7953584
https://blog.csdn.net/lk142500/article/details/79535849
ubuntu14安装golang1.10:
......
......@@ -171,3 +171,158 @@ Dashboard可以浏览状态、报警等,Edit dashboard可以自定义。比如
这是最基本的使用,后续添加如何自定义监测项,利用api批量添加主机、动态管理监测项等功能。
模板
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
繁星2代模板已放在sdv上 smb://192.168.9.1/公共模块/繁星/繁星二代/自检系统/zabbix_template
自定义监测项
-------------------------------------------------
zabbix的监测项有两种:
1. 上报型
zabbix item type选择 traper。需配合zabbix_sender使用
2. 查询型
zabbix item type选择 agent
如果没有特殊需求,均采用查询型,走vproc流程。
应用程序使用vproc将状态写到文件,zabbix_agentd用vproc查询各状态的值,采用这种方式的原因:
- zabbix的交互压力可控,查询频率在web上配一下就好了。
- 应用程序写状态的操作与zabbix解耦。即使没有zabbix,我们在调试程序时也可以使用vproc,可以用命令行查询检测项的值。有助于调试
vproc后面章节有详细介绍
繁星增加自定义监测项典型流程
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
细节可以自行百度“zabbix增加自定义item”
界面上操作可参考:https://blog.csdn.net/u012062455/article/details/53257059
zabbix_agentd端操作可参考:https://www.cnblogs.com/mingerlcm/p/7754076.html
以繁星2代为例。假设我们要在slave模板中增加vaserver的“进程号”、“是否授权”两个监测项。
1. 在zabbix web端增加检测项
监测项是添加到模板中的,添加后所有使用该模板的主机均生效,修改starnet_tx1_slave_tp模板
- 点击Configuration->Template 。
- 点击starnet_tx1_slave_tp行的items。
- 点右上角的Create item
- 填写具体信息并保存
2. 在zabbix_agentd端配置
- 确保/usr/local/etc/zabbix_agentd.conf中有配置
.. code-block:: shell
UnsafeUserParameters=1
Include=/usr/local/etc/zabbix_agentd.conf.d/*.conf
- 在/usr/local/etc/zabbix_agentd.conf.d/vaserver.conf增加命令行,如果没有可新建文件
.. code-block:: shell
# UserParameter=后面是key值,必须跟web上配置的相同。逗号后面的是查询这个值所执行的指令。
# 进程号很简单,shell命令就能搞定
UserParameter=vaserver.pid,pgrep VAServer
# license状态是需要应用程序开发者写入到vproc系统中(/root/UserApp/vproc/vaserver/license文件内容)的。在这里用vproc工具进行查询。如果没查到,返回0
UserParameter=vaserver.license,vproc read --key=vaserver.license --value=0
3. 重启zabbix_agentd。过一会在web上就能看到了。
vproc
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
vproc是python编写的工具
类似linux proc系统,应用程序调用vproc脚本将监测项状态值持续更新到指定文件中。外部可读取文件值,得知应用程序的运行情况。
vproc工具有3种用法。
- 写:
.. code-block:: shell
# 此命令将创建文件 ROOT_VPROC/app/group1/group2/item,文件内容为value1
./vproc write --key=app.group1.gourp2.item --value=value1
- 读:
.. code-block:: shell
# 将ROOT_VPROC/app/group1/group2/item文件内容打印出来
./vproc read --key=app.group1.gourp2.item
- 重置:
.. code-block:: shell
# 删除ROOT_VPROC/app/group1/目录。相当于重置状态值
./vproc clean --path=app.group1
所有key值均采用 app.[group1.gourp2...groupn].item方式组织。末端item为文件,记录监测项的值,前面是多级目录。比如key值vaserver.va0.cameraname,记录状态值的文件为VPORC_ROOT/vaserver/va0/cameraname。
单个监测项更新状态频率不宜过快。建议间隔时间1分钟以上
**注意**: 建议在程序(以及能代表一组的流程)启动时、关闭时重置状态,**避免旧的状态值干扰**。拿vaserver举例:
有vaserver.event_count(发出了多少事件) ; vaserver.va0.taskname(分析通道0的任务名称); vaserver.va1.taskname
vaserver启动和退出时应调用
.. code-block:: shell
./vproc clean --path=vaserver
vaserver启动、关闭一个va时(假设是编号0)应调用
.. code-block:: shell
./vproc clean --path=vaserver.va0
自定义监测项列表
-------------------------------------------------
VAServer
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
+------------------------------------+-------+----------------------------------------+
| key | 类型 | 说明 |
+====================================+=======+========================================+
| vaserver.va0.taskname | Text | 任务名称 |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.taskid | Text | 任务id |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.cameraname | Text | 相机名称 |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.cameraid | Text | 相机id |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.playok | int | 是否点播成功,实际接收到流后再更新状态 |
+------------------------------------+-------+----------------------------------------+
| vaserver.va0.sendresultcount | int | 对外发送了多少条结果,1分钟更新一次 |
+------------------------------------+-------+----------------------------------------+
| vaserver.va[1...n].bigtaskname | 同va0 | 同va0 |
| | | |
| ... | | |
| | | |
| vaserver.va[1...n].sendresultcount | | |
+------------------------------------+-------+----------------------------------------+
| vaserver.license | int | 授权状态,check license后更新 |
+------------------------------------+-------+----------------------------------------+
修订历史
================
2018.10.24
------------
1. 错别字修改,ansible的脚本叫playbook不是playback
2. 增加4.4 4.5自定义监测项相关说明
3. 增加vproc使用方法和原理
4. 离线安装包更新,增加了vaserver的几个自定义监控项:
- 增加zabbix_agent_proxy_tx1/bin/vproc 。
- zabbix_agent_proxy_tx1/etc/zabbix_agentd.conf和zabbix_agent_proxy_tx1/etc/zabbix_agentd.conf.d更新
5. 增加zabbix监控模板: smb://192.168.9.1/公共模块/繁星/繁星二代/自检系统/zabbix_template 。新部署的zabbix将模板导入即可
2018.10.17
------------
......
......@@ -198,14 +198,25 @@
</li>
<li class="toctree-l2"><a class="reference internal" href="40-zabbix.html#id6">4.3. 使用</a><ul>
<li class="toctree-l3"><a class="reference internal" href="40-zabbix.html#quick-start">4.3.1. quick start</a></li>
<li class="toctree-l3"><a class="reference internal" href="40-zabbix.html#id7">4.3.2. 模板</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="40-zabbix.html#id8">4.4. 自定义监测项</a><ul>
<li class="toctree-l3"><a class="reference internal" href="40-zabbix.html#id9">4.4.1. 繁星增加自定义监测项典型流程</a></li>
<li class="toctree-l3"><a class="reference internal" href="40-zabbix.html#vproc">4.4.2. vproc</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="40-zabbix.html#id10">4.5. 自定义监测项列表</a><ul>
<li class="toctree-l3"><a class="reference internal" href="40-zabbix.html#vaserver">4.5.1. VAServer</a></li>
</ul>
</li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="99-history.html">5. 修订历史</a><ul>
<li class="toctree-l2"><a class="reference internal" href="99-history.html#id2">5.1. 2018.10.17</a></li>
<li class="toctree-l2"><a class="reference internal" href="99-history.html#id3">5.2. 2018.10.10</a></li>
<li class="toctree-l2"><a class="reference internal" href="99-history.html#id4">5.3. 2018.10.09</a></li>
<li class="toctree-l2"><a class="reference internal" href="99-history.html#id2">5.1. 2018.10.24</a></li>
<li class="toctree-l2"><a class="reference internal" href="99-history.html#id3">5.2. 2018.10.17</a></li>
<li class="toctree-l2"><a class="reference internal" href="99-history.html#id4">5.3. 2018.10.10</a></li>
<li class="toctree-l2"><a class="reference internal" href="99-history.html#id5">5.4. 2018.10.09</a></li>
</ul>
</li>
</ul>
......
# ansible playback实例介绍
# ansible playbook实例介绍
## change_user_pass.ymv
......@@ -6,7 +6,7 @@
## supervisor_offline_tx1.yml
拷贝目录并执行脚本可以参考这个playback。 这个模式可以实现大部分批量管理需求
拷贝目录并执行脚本可以参考这个playbook。 这个模式可以实现大部分批量管理需求
step:
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!