首页 文章 精选 留言 我的

精选列表

搜索[自动装配],共10000篇文章
优秀的个人博客,低调大师

zabbix自动化线上实战--Zabbix lld发现磁盘监控

Zabbix3.0入门到生产环境应用实战: http://www.roncoo.com/course/view/fb3050a5b34b42f39ccad83ebebc89c1 一、软件版本 操作系统:CentOS-6.5-x86_64 zabbix版本:3.0.3 二、脚本编写: 1、python版本: #!/usr/bin/env python import json import subprocess def get_disk(): cmd = """grep -E "(vd[a-z]$|sd[a-z]$)" /proc/partitions|awk '{print $4}'""" disk_data = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) disk_total = [] disktotal_dict = {"data":None} for dev in disk_data.stdout.readlines(): disk_dict = {} disk_dict["{#DISKNAME}"]=dev.strip("\n").strip() disk_total.append(disk_dict) disktotal_dict["data"]=disk_total jsonstr = json.dumps(disktotal_dict, sort_keys=True, indent=4) return jsonstr if __name__ == "__main__": print get_disk() 2、shell脚本版本: #!/bin/bash disk_array=(`grep -E "(vd[a-z]$|sd[a-z]$)" /proc/partitions|awk '{print $4}'`) length=${#disk_array[@]} printf "{\n" printf '\t'"\"data\":[" for ((i=0;i<$length;i++)) do printf '\n\t\t{' printf "\"{#DISKNAME}\":\"${disk_array[$i]}\"}" if [ $i -lt $[$length-1] ];then printf ',' fi done printf "\n\t]\n" printf "}\n" 三、key的查看解析:主要 /proc/diskstats文件读取: 1、读取具体文件解析: [root@BJ-monitor-h-01 ~]# cat /proc/diskstats | grep sda 8 0 sda 844141 181483 43038400 10926021 147765030 3756991779 31237698668 4206792245 0 52927059 4217644644 ##每一项解读: 844141 181483 43038400 10926021 147765030 3756991779 31237698668 4206792245 0 52927059 4217644644 第一个区域:读完成次数 ----- 读磁盘的次数,成功完成读的总次数。 第二个区域:合并读完成次数, 第6个域:合并写完成次数。为了效率可能会合并相邻的读和写。从而两次4K的读在它最终被处理到磁盘上之前可能会变成一次8K的读,才被计数(和排队),因此只有一次I/O操作。这个域使你知道这样的操作有多频繁。 第3个域:读扇区的次数,成功读过的扇区总次数。 第4个域:读花费的毫秒数,这是所有读操作所花费的毫秒数 第5个区域:写完成次数 ----写完成的次数,成功写完成的总次数。 第6区域:合并写完成次数 -----合并写次数。 第7个域:写扇区次数 ---- 写扇区的次数,成功写扇区总次数。 第8个域:写操作花费的毫秒数 --- 写花费的毫秒数,这是所有写操作所花费的毫秒数 第9个域:正在处理的输入/输出请求数 -- -I/O的当前进度,只有这个域应该是0。当请求被交给适当的request_queue_t时增加和请求完成时减小。 第10个域:输入/输出操作花费的毫秒数 ----花在I/O操作上的毫秒数,这个域会增长只要field 9不为0。 第11个域:输入/输出操作花费的加权毫秒数 ----- 加权, 花在I/O操作上的毫秒数,在每次I/O开始,I/O结束,I/O合并时这个域都会增加。这可以给I/O完成时间和存储那些可以累积的提供一个便利的测量标准。 2、编写agnet key的几个监控项目: UserParameter=custom.vfs.dev.read.ops[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$4}' ###读磁盘完成的次数 UserParameter=custom.vfs.dev.read.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$7}' ###读花费的毫秒数 UserParameter=custom.vfs.dev.write.ops[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$8}' ###写完成的次数 UserParameter=custom.vfs.dev.write.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$11}' ###写操作花费的毫秒数 UserParameter=custom.vfs.dev.io.active[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$12}' ###当前的IO情况 UserParameter=custom.vfs.dev.io.ms[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$13}' ###花在I/O操作上的毫秒数 UserParameter=custom.vfs.dev.read.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$6}' ##读取扇区次数 UserParameter=custom.vfs.dev.write.sectors[*],cat /proc/diskstats | grep $1 | head -1 | awk '{print $$10}' ##写扇区次数 关注微信:

优秀的个人博客,低调大师

Pod Preset玩转K8S容器时区自动配置

缘由 默认的情况,在K8S里启动一个容器,该容器的设置的时区是UTC0,但是对于很多客户而言,其主机环境并不在UTC0。例如中国客户在UTC8。如果不把容器的时区和主机主机设置为一致,则在查找日志等时候将非常不方便,也容易造成误解。但是K8S以及Docker容器没有一个简便的设置/开关在系统层面做配置。都需要我们从单个容器入手做设置,具体方法如下: 纯Docker的时区设置方式 Docker引擎提供了两种设置方式,分别是通过环境变量以及挂载主机文件方式来完成 方式一:设置容器的时区环境变量 先看看没有设置前,容器的情况: docker run -it --rm centos date cat /etc/localtime 从输出可以看出,容器和主机差了8个时区 我们通过环境变量的方式来改变容器的时区: docker run -it --rm -e

优秀的个人博客,低调大师

AI-多云互联,网络通信的“自动驾驶

数字时代需要可编程的灵活性,敏捷性和互连性 全球国际电信会议PTC称数字化转型将开启“‘连接’的新十年”。Equinix在发布的《全球互联指数》报告中指出,城市化、数据主权、网络安全和全球数字服务贸易等技术的使用,推动了全球数字化的发展趋势。正是在这样的背景下,数字媒体、人工智能/机器学习(AI/ML)、大数据和安全分析、增强/虚拟现实和物联网(IoT)等产业日益增长。 与传统骨干网络相比,这些技术应用的动态性和交互性特征需要更加的弹性、灵活、低延迟和高带宽的连接来处理数字洪流。事实上,全球互连指数预测,到2020年,数字业务将需要5,000 Tbps以上的互连带宽容量,才能满足企业之间数据交换,这一带宽容量需求已经超过了当前全球IP流量、互联网和MPLS网络的总体增长。 这就是为什么业界纷纷转向SDN和NFV技术,从而将其带入数字化时代的未来! 过去十年来,SDN和NFV的供应商和用户一直致力于充分利用这两种不断发展的技术,但仍有很大的增长空间。TBR报告称,近四分之三的领先一级运营商已经或计划采用SDN和NFV。报告预测从2016年到2022年,SDN/NFV总开支将增长94.3%,达到1680亿美元。 为了在新的全球经济中取得成功,企业需要在数字和商业生态系统内部以及之间建立全球互联关系,以便利用邻近性进行直接和安全的数据交换。这种邻近性使他们能够为全球数字用户群创建一个更动态、物理和虚拟的分布式、互连和集成的解决方案。 基于SDN的互连架构使企业能够充分利用混合IT基础架构的重要协同作用,融合本地和厂商中立的多租户数据中心,网络,云,应用程序,数据和安全性,为客户创建全球集成的端到端数字解决方案。 传统的基于运营商的网络和基于SDN的互连结构 我们看到SDN / NFV基础架构在全球数字业务数字化转型中扮演着重要角色。 例如:战略性地为边缘IT流量交换和控制提供可编程互连功能,以访问对延迟敏感的关键IT服务,应用和数据/资产分析。 支持快速访问与应用程序、数据和用户密切相关的的混合和多云服务。这加快了市场速度,和可扩展性,确保了业务连续性和灾难恢复的可靠冗余。 要想实现“能够为全球数字用户群创建一个更动态、物理和虚拟的分布式、互连和集成的解决方案“,跨平台、混合多云服务的网络连接和打通就成为了首要解决的问题。 传统的基于运营商的网络和基于SDN的互连结构目前存在以下问题需要注意和解决: 不同云厂商及IDC平台间由于自身技术机构和程序编排的差异,导致跨平台(跨供应商)间的互联变得更加困难; 随着业务及应用技术的快速扩张和飞速发展,为了适应终端客户或合作伙伴的需求,目前企业对于混合多云的互联需求已经不只停留在点对点或点对多点的互联上,使系统得到一个能够快速实现多点全网状结构的平台或功能; 传统运营商专线组网的业务模式,导致多云互联带宽需求会因可能极少出现但必须得到保证的最高带宽作为购买的基础,无法按需、弹性使用和计费,在全网拓扑下这更成为了意见天大的难事; 多云互联在传统专线接入方式下,固定带宽模式经常会出现过渡使用或资源冗余的情况出现,无法按需分配给需要的节点使用。 SDN/NFV和AI是如何被杠杆和商业化的? 通过SDN平台可以打破不同厂商不同平台的差异,通过简单几步操作快速实现跨平台的混合多云连接服务; 为了迎合多云混合、协同的需求,必须拥有具备建立矩阵式全网状拓扑结构网络的功能; 在全网状拓扑结构下可以实现任意连接端口的实时弹性带宽调整; 建立带宽资源池,打破固定端口或线路带宽的模式,具备一颗超强计算能力的“大脑“,它可以通过端口流量历史情况、突发状态等数据进行分析,从而AI智能的判断和实时调节分布在全球各地的端口限速,直到资源池用量到达阈值后进行告警,将资源利用效率和变化莫测的终端带宽需求完美的融合解决。

优秀的个人博客,低调大师

原生js javascript 实现trigger(自动触发window 的resize事件)

一、大家都知道 jQuery有个 trigger 方法,可以触发被选元素的指定事件类型。 那么在原生js中怎么实现 trigger 的方法呢?首先上代码: 二、如果我想在不实际改变浏览器窗口大小的情况下触发 window的 resize 事件可不可以呢?(虽然听起来有些变态,但是有时候你需要重绘图表或者别的需求的时候,这可以帮你解决一些问题)同样的,先上代码: 感谢阅读 喜欢看小编文章的点个订阅或者喜欢!小编每天都会跟大家分享文章,也会给大家提供web前端学习资料。

优秀的个人博客,低调大师

Python构建企业微信自动消息转发服务端

一、背景 目前有在项目分组,就小组成员中,微信群消息回复较多的情况下,想根据组来转发特定消息,包含文字、图片、语言等。在此只是自己实现仅供参考,可以根据自身需求修改更多功能。 二、代码 2.1 企业微信相关信息 企业ID:corpid 自建应用appid 自建应用secret 获取access_token api 发送消息 api 2.2 服务端部署运行环境:python 版本 2.7 git clone https://github.com/redhatxl/wechatmsg.git nohup python2.7 wechatmsg/wx_msg_server.py & 2.3 参考RUL: 获取access_token发送消息 2.4 代码 核心代码github地址 # flask 框架后台 def server_run(self): app = Flask(__name__) @app.route('/index', methods=['GET', 'POST']) def index(): wxcpt = WXBizMsgCrypt(self.sToken, self.sEncodingAESKey, self.sCorpID) # 获取url验证时微信发送的相关参数 sVerifyMsgSig = request.args.get('msg_signature') sVerifyTimeStamp = request.args.get('timestamp') sVerifyNonce = request.args.get('nonce') sVerifyEchoStr = request.args.get('echostr') # 验证url if request.method == 'GET': ret, sEchoStr = wxcpt.VerifyURL(sVerifyMsgSig, sVerifyTimeStamp, sVerifyNonce, sVerifyEchoStr) print type(ret) print type(sEchoStr) if (ret != 0): print "ERR: VerifyURL ret:" + str(ret) sys.exit(1) return sEchoStr # 接收客户端消息 if request.method == 'POST': sReqMsgSig = sVerifyMsgSig sReqTimeStamp = sVerifyTimeStamp sReqNonce = sVerifyNonce sReqData = request.data print(sReqData) ret, sMsg = wxcpt.DecryptMsg(sReqData, sReqMsgSig, sReqTimeStamp, sReqNonce) print ret, sMsg if (ret != 0): print "ERR: DecryptMsg ret: " + str(ret) sys.exit(1) # 解析发送的内容并打印 xml_tree = ET.fromstring(sMsg) print('xml_tree is ', xml_tree) 消息内容发送 def _send_text_msg(self, content): data = { "touser": ('|').join(self.userid.split(',')), "toparty": ('|').join(self.partid.split(',')), # "toparty":int(self.partid), "msgtype": "text", "agentid": self.agent_id, "text": { "content": content }, "safe": 0 } try: response = requests.post(self.send_msg_url.format(self.access_token), json.dumps(data)) self.logoper.info(response.text) print(response.text) result_msg = json.loads(response.content)['errmsg'] return result_msg except Exception as e: self.logoper.info(e) 日志 def create_dir(self): """ 创建目录 :return: 文件名称 """ _LOGDIR = os.path.join(os.path.dirname(__file__), self.logdir_name) _TIME = time.strftime('%Y-%m-%d', time.gmtime()) + '-' _LOGNAME = _TIME + self.logfile_name LOGFILENAME = os.path.join(_LOGDIR, _LOGNAME) if not os.path.exists(_LOGDIR): os.mkdir(_LOGDIR) return LOGFILENAME def create_logger(self, logfilename): """ 创建logger对象 :param logfilename: :return: logger对象 """ logger = logging.getLogger() logger.setLevel(logging.INFO) handler = logging.FileHandler(logfilename) handler.setLevel(logging.INFO) formater = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formater) logger.addHandler(handler) return logger 配置文件 # 定义微信公众号信息 [common] # 企业微信企业ID corpid = wxe23xxxxxxxxxxx # 接收消息服务器配置 [recmsg] Token = mVNAAw3xxxxxxxxxxxxxxxxx EncodingAESKey = vwbKImxc3WPeE073xxxxxxxxxxxxxxxxxx # 自建应用信息 [appconfig] # 自建应用agentid agentid = 1000002 # 自建应用secret secret = 6HAGX7Muw36pv5anxxxxxxxxxxxxxxxxxxxxxxxxxxxxx # 消息接收信息 # 消息接收用户id,如果多个用户用英文','隔开 userid = xuel|yaoy # 消息接收部门id,如果多个用英文','隔开 partid = 11 [urlconfig] # 获取应用token的api接口 get_access_token_url = https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid={}&corpsecret={} # 发送消息api接口 send_msg_url = https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token={} # 上传媒体api接口,获取mediaid upload_media_url = https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token={}&type=image # 上传高清语音接口 upload_video_url = https://qyapi.weixin.qq.com/cgi-bin/media/get/jssdk?access_token={}&media_id={} [loginfo] #日志目录 logdir_name = logdir #日志文件名称 logfile_name = wechat_server.log 三、测试 在企业微信发送消息,可以修改配置文件制定转发到特定的群组,从而避免消息分流。启用应用API,设置回调地址测试发送消息查看接受消息 四、优化 后期可以配合数据库将每次获取的access_token 保存至数据库,待2小时过期后,再重新获取新的。 更多内容转发

优秀的个人博客,低调大师

阿里云Kubernetes容器服务Istio实践之Sidecar自动注入

概述 在前面系列文章中已经介绍了Istio及其各个核心组件,详述了如何利用阿里云Kubernetes容器服务,快速搭建一套用于连接、管理以及保护微服务的开放平台Istio,为应用引入和配置多个相关服务;并且通过一个官方示例演示了如何部署应用到上述Istio环境中,演示了如何设置智能路由、分布式追踪以及Istio 的遥测数据收集、查询及可视化等功能。 回顾这个系列文章请参考:阿里云Kubernetes Service Mesh实践进行时(1): Istio初体验阿里云Kubernetes Service Mesh实践进行时(2): 通过示例深入Istio阿里云Kubernetes Service Mesh实践进行时(3): 智能路由阿里云Kubernetes Service Mesh实践进行时(4): 分布式追踪阿里云Kubernete

资源下载

更多资源
腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册