2015年3月20日星期五

zabbix创建screen脚本

本邮件内容由第三方提供,如果您不想继续收到该邮件,可 点此退订
zabbix创建screen脚本  阅读原文»

zabbix创建screen脚本

下面是创建screen的脚本,可以把一个主机的所有graphs放在一个screen里查看。

  #!/usr/bin/env python  import urllib2  import json  import argparse  def authenticate(url, username, password):      values = {'jsonrpc': '2.0',                'method': 'user.login',                'params': {                    'user': username,                    'password': password                },                'id': '0'                }      data = json.dumps(values)      req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})      response = urllib2.urlopen(req, data)      output = json.loads(response.read())      try:          message = output['result']      except:          message = output['error']['data']          print message          quit()      return output['result']  def getGraph(hostname, url, auth, graphtype, dynamic, columns):      if (graphtype == 0):          selecttype = ['graphid']          select = 'selectGraphs'      if (graphtype == 1):          selecttype = ['itemid', 'value_type']          select = 'selectItems'      values = {'jsonrpc': '2.0',                'method': 'host.get',                'params': {                    select: selecttype,                    'output': ['hostid', 'host'],                    'searchByAny': 1,                    'filter': {                        'host': hostname                    }                },                'auth': auth,                'id': '2'                }      data = json.dumps(values)      req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})      response = urllib2.urlopen(req, data)      host_get = response.read()      output = json.loads(host_get)      # print json.dumps(output)      graphs = []      if (graphtype == 0):          for i in output['result'][0]['graphs']:              graphs.append(i['graphid'])      if (graphtype == 1):          for i in output['result'][0]['items']:              if int(i['value_type']) in (0, 3):                  graphs.append(i['itemid'])      graph_list = []      x = 0      y = 0      for graph in graphs:          graph_list.append({              "resourcetype": graphtype,              "resourceid": graph,              "width": "500",              "height": "100",              "x": str(x),              "y": str(y),              "colspan": "0",              "rowspan": "0",              "elements": "0",              "valign": "0",              "halign": "0",              "style": "0",              "url": "",              "dynamic": str(dynamic)          })          x += 1          if x == columns:              x = 0              y += 1      return graph_list  def screenCreate(url, auth, screen_name, graphids, columns):      # print graphids      if len(graphids) % columns == 0:          vsize = len(graphids) / columns      else:          vsize = (len(graphids) / columns) + 1      values = {"jsonrpc": "2.0",                "method": "screen.create",                "params": [{                    "name": screen_name,                    "hsize": columns,                    "vsize": vsize,                    "screenitems": []                }],                "auth": auth,                "id": 2                }      for i in graphids:          values['params'][0]['screenitems'].append(i)      data = json.dumps(values)      req = urllib2.Request(url, data, {'Content-Type': 'application/json-rpc'})      response = urllib2.urlopen(req, data)      host_get = response.read()      output = json.loads(host_get)      try:          message = output['result']      except:          message = output['error']['data']      print json.dumps(message)  def main():      # 修改下面三行      url = 'http://<zabbix url>/zabbix/api_jsonrpc.php'      username = "Your API Users Username"      password = "Your API Users Username"      parser = argparse.ArgumentParser(description='Create Zabbix screen from all of a host Items or Graphs.')      parser.add_argument('hostname', metavar='H', type=str,                          help='Zabbix Host to create screen from')      parser.add_argument('screenname', metavar='N', type=str,                          help='Screen name in Zabbix.  Put quotes around it if you want spaces in the name.')      parser.add_argument('-c', dest='columns', type=int, default=3,                          help='number of columns in the screen (default: 3)')      parser.add_argument('-d', dest='dynamic', action='store_true',                          help='enable for dynamic screen items (default: disabled)')      parser.add_argument('-t', dest='screentype', action='store_true',                          help='set to 1 if you want item simple graphs created (default: 0, regular graphs)')      args = parser.parse_args()      hostname = args.hostname      screen_name = args.screenname      columns = args.columns      dynamic = (1 if args.dynamic else 0)      screentype = (1 if args.screentype else 0)      auth = authenticate(url, username, password)      graphids = getGraph(hostname, url, auth, screentype, dynamic, columns)      print "Screen Name: " + screen_name      print "Total Number of Graphs: " + str(len(graphids))      screenCreate(url, auth, screen_name, graphids, columns)  if __name__ == '__main__':      main()  

脚本使用方法:

wKiom1UKQlOT0WhWAAI79jqD5kg662.jpg

效果图:

wKioL1UKQsHTEECGAAalER_ze3c800.jpg

脚本官方地址:https://www.zabbix.org/wiki/Python_script_to_create_Screen_from_all_Items/Graphs_of_a_host

本文出自 "启程的Linux博客" 博客,请务必保留此出处http://qicheng0211.blog.51cto.com/3958621/1622152

mysql存储引擎优化参数  阅读原文»

mysql存储引擎优化参数

MySQL配置参数优化

本文来自道森学习笔记,版权归 http://wubx.net/所有

MyISAM存储引擎优化

涉及参数如下:

Key_buffery_size

Concurrent_insert = 2 | WAAYS

Bulk_insert_buffer_size=8M

Myisam_recover_options=FORCE

Myisam_recover_threads=1

Myisam_sort_buffer_size=1G

参数解释:

key_buffery_size

主要用于存放myisam表的索引信息,而且还有专门的IO调度算法,如果搞不定将会将其buffer冲掉

#在mysql 5.6版本默认引擎调整为了innodb,临时表默认引擎也一样,所以myisam引擎基本调整一下key_buffer_size 即可,但是不能禁掉,因为mysql库目前里面大多数都是myisam

只有几张表是innodb,所以这里面很多都是myisam引擎 不能将其禁掉

但是对于5.6版本中key_buffer_size 给8M就可以

bulk_inser_buffer_size = 8M (默认)

在高版本中默认8M,低版本默认还是4M;所以如果小的话可以改大一点,这个值通常来说一般sql为 :

insert into tb (c1,c2,c3) values(),()....;

如果配置的是1M,那么insert执行了4M的数据,这样的话会报错,默认情况下不用调整,但是如果做数据采集之类的场景,需要将其调大

对于myisam表 可能会出现坏掉了之类的情况,这个里面可以将以下几个参数开打:

Myisam_recover_options=FORCE

Myisam_recover_threads=1

Myisam_sort_buffer_size=1G

这样会自动进行修复,对于myisam表是一种修复

本文来自道森学习笔记,版权归 http://wubx.net/所有

但是有缺点,如果使用Myisam_recover_options=FORCE ,很可能会丢失数据,因为myisam表已经不能保证数据一致性,所以丢数据也避免不了,所以,如果业务数据非常重要,对于安全性要求很高,那么尽量不要用myisam

因为5.5之后官方不会对myisam做任何升级和维护;5.6之后默认引擎为innodb。临时表也改为innodb

本文来自道森学习笔记,版权归 http://wubx.net/所有

innodb引擎优化

innodb_buffer_pool_size (面试必问)

主要存放热数据,按照page来存放,page为最小单位,甚至是按段来存放

建议值: 如果是专用数据库server 建议分到物理内存的50% -- 75%

如果跑有其他服务,那么建议"2/8的原则":

比如100G的数据,最少达到10%的活跃数据,那么建议buffer pool分20G

如果是好友关系系统,这样的数据都几乎是热数据,那么建议30%-50%的内存

再比如偷菜游戏,几乎所有都能达到90%的热数据,那么你懂的

innodb_buffer_pool_instances

主要为了方便buffer pool全局的锁,

一般情况下设置为8 ,在5.5版本是分到4 ,到了5.6版本之后要分到8,不能改成其他值,因为这是压测得出的结果,8是可能得到最好的性能

innodb_log_file_size

建议设置为data page的百分比,比如page为15% 那么buffer pool为100G ,那么两边相乘得出结果为15G,其实建议的是与data page配置的相等,有可能都配置不了那么大,那么就将file_size设置为1g

那么如果我们要用多个log file,就会涉及到以下参数

innodb_log_file_in_gourp

可以设置有几个log文件,至于如何计算:

Innodb的redo log 文件大小,总大小为innodb_log_file_size *

Innodb_log_file_ingroup 总大小不要低于600M

一般建议3个log file即可 多了没有必要

本文来自道森学习笔记,版权归 http://wubx.net/所有

innodb_file_per_table

是否设置独立表空间

在5.6之前是关闭的, 在5.6之后默认为打开,建议是打开状态

innodb_file_format #建议指定为 Barracuda

innodb_flush_log_at_trx_commit

如果在导数据,可能是2天或者3天也没有导完,那么可能是这个参数设置为1的结果导致

1 为每一次事务进一次刷新到磁盘,安全度高,但是性能最低,经常会导致导数据最慢

0 每秒钟进一下事务的刷新到磁盘

2 一般建议值,大约每秒一次事务的刷新及同步到磁盘,实际只写到操作系统的buffer中,操作系统如果断电会导致失误丢失;#因为导数据都是人为参与的过程所以设置为2,让速度最大化完成,如果出错再手动搞一次即可,建议值

innodb_flush_log_at_timeout (在5.6中被引入)

该参数用于控制每N秒(1-2700秒之间)刷新一次日志。是对group commit的一个增强功能,默认是1秒,1秒钟刷新一次并由croup commit来处理,实际可以在1-2700秒之间来搞,如果系统对性能要求很高,可以将这个值设置大一些,吞吐率也会更高,因为group commit工作也会更好一点,如果说对同步实时性要求很高,那么就设置低一点,默认值即可

之间是一个相对的关系,如果调大会得到一个很好的性能,但是从库可能会出现延迟

如果调整为3秒,那么这3秒做一次commit,那么在第2秒的时候挂掉了,那么在这2秒的时候数据会丢失

innodb_flush_method

用指定数据实际写到磁盘上的方法,直接使用O_DIRECT即可

O_DIRECT 工作在XFS或EXT4上性能都很不错的

最大问题就是O_DIRECT用来减小系统的VFS级别的cache,节省出来的内存可以提供buffer pool来使用

如果用fsync来做,其会占用vfs级别的cache,会占用大量内存,如果buffer pool很大,那么容易造成oom

所以使用O_DIRECT来做是为了节省内存提供buffer pool更大空间

阅读更多内容

没有评论:

发表评论