Category Archives: code

perl, lua, bash, c…

自定义 influxdb 数据结构, 生成 grafana 趋势图

By | 2017/09/04

介绍 目前使用 grafana 来生成漂亮的监控图像变得越来越流行, 笔者认为 grafana 之所以流行的原因主要在于它的灵活性和扩展性. 管理员可以很方便的选择各种数据源作为监控数据的后端存储, 这些源包括 Graphite, influxDB, Prometheus, OpenTSDB 等, 我们可以根据需要将搜集到的数据存到指定的源中, grafana 再读取源数据, 最后按照管理员指定的各种规则以不同的图像显示出指定的数据. grafana 支持的图形方式则更为丰富graph, 各种图形属性及展示方式应有尽有. 当然更为方便的是我们可以根据数据源的信息做出更为精细的图像进而展示. 以管理员经常用到的监控工具为例, nagios 适合报警触发, cacti 适合查看图像趋势, zabbix 则稍微好点, 包含了报警和图形趋势. 但是 cacti/zabbix 本身是以指定间隔时间采集数据, 时间太短的话会引起采集脚本负担太重, 时间太长则可能磨平问题发生时的图像尖峰. 而 grafana 支持较多的数据源, 如果我们将采集到的数据存储到基于时间序列的数据库中, 就有可能实现生成基于秒, 分钟的监控图像. 比如下图所示, 在访问突然增大的情况下, cacti 已经将尖峰削去了很多, grafana 则显示的更为精细, 这在故障发生进行追踪分析的时候就显得特别有用, 如下所示, 更精确的监控更能接近问题的真相: cacti 监控: grafana 监控 下面的我们介绍的实例基于数据源… Read More »

如何实现 MySQL 的一次一密登录

By | 2017/08/18

如何实现 MySQL 的一次一密登录 背景介绍 在日常工作环境中, 开发或者测试人员经常需要连接测试库、线上库等查看表结构或数据来验证程序的功能. 实际上让 DBA 协助开发者查看信息会是特别繁琐且无趣的事情, 所以为了方便起见会将数据库的权限分发给开发或者测试人员. 不过长此以往下去有几件事情会让 DBA 深恶痛绝: 1. 账号会在开发者之间相互传递; 2. 为了方便开发者会以快捷命令的方式查看信息, 密码信息容易暴露; 3. 开发者忘记密码, DBA 可能需要重置以通知所有其他人员修改密码; 事实上, 上述几种情况是很难避免的, 只要有人工参与就会有这些潜在危险的隐患, 所以我们就需要提供一个相对方便记住的又能保证相对安全的方式供开发者使用. 下面则从不同层面简单的对这种方式进行描述. 管理主机 如果从系统层面来看, 我们建议最好把所有的开发者都集中到一台管理主机上登录, 只有开发者连接到这台机器上, 才能通过该机器连接测试库, 线上库等进行查询信息操作. 如下图所示: +————+ ssh +————–+ +———–+ | developers | ———-> | manager host | ———> | databases | +————+ +————–+ +———–+ 开发者通过 ssh… Read More »

percona UDF 介绍

By | 2017/03/24

简介 在较新的 percona 分之版本中, 其提供了三个自定义的哈希函数, 分别为 fnv_64, fnv1a_64 和 murmur_hash, 这三个函数可以提供更快速度和更小碰撞率的哈希计算, 从这点看可以用来替换 md5, crc32 等函数, 而且由于速度快、碰撞率小的特性, 这些函数也可以作为一致性哈希函数来使用. 如何安装这三个函数详见 udf_percona_toolkit. 函数介绍 大致了解这三个函数后, 再来简单说明这三个函数的相关实现. fnv 哈希算法 FNV哈希算法最早在1991年提出, 是 Fowler-Noll-Vo 的简写,其以三位发明人Glenn Fowler,Landon Curt Noll,Phong Vo的名字来命名的. 另外现今很多流行的中间件或分布式工具都有该函数的申请, 比如 twemproxy 等工具. FNV能快速hash大量数据并保持较小的冲突率,它的高度分散使它适用于hash一些非常相近的字符串,比如URL,hostname,文件名,text,IP地址等. 现有的版本有 FNV-1 和 FNV-1a, FNV-0 已经废弃, FNV-1 和 FNV-1a 两个函数生成的 hash 值有以下两个限制(FNV offset basis 为无符号整数): 无符号整型; hash 值的位数为… Read More »

如何安全的使用 bash 操作 MySQL

By | 2016/10/12

最近在 percona blog 中看到这篇文章 use-mysql-shell-securely-from-bash , 讲述如何在 Bash 中安全的使用 MySQL 进行查询. 字面意思的安全要比文章所说的更宽泛, 不过这篇文章有几点可取之处值得学习, 因为 Bash 的方便性, 我们经常用到 Bash 来完成各种脚本任务, 如果操作数据库的话(比如备份, 监控等), 任何可以执行 ps aux 命令的用户都可以看到正在执行的命令, 一些敏感信息如配置文件, 用户密码等都可以看到, 另外在 MySQL 5.6 之后命令行下用密码连接数据库也会得到警告信息 Warning: Using a password on the command line interface can be insecure. 如何隐藏进程中的密码信息是我们都需要关注的, 文章中的作者用了很巧妙的方式来达到隐藏的目的, 甚至 ip, port 等也可以隐藏, 并且 5.6 版本中的 warning 信息也不会再出现, 我在下面会基于此技巧进行阐述,… Read More »

Common utilities for sysadmin/dba

By | 2016/05/26

sys-toolkit Some useful scripts to sysadmins/dbas. read more from: https://github.com/arstercz/sys-toolkit toolkit lists: sys-genpass sys-nton sys-pubip sys-ascii sys-ipton sys-lock-run sys-repeat sys-checkport sys-echo-stderr sys-php-chroot sys-tcp-port-proxy sys-shell-type sys-memory-maps sys-mem-redis-summary sys-mysql-summary sys-mysql-adj sys-mysql-kill-blocked-thread sys-mysql-kill-long-query sys-mysql-block-account sys-mysql-createdb sys-mysql-qps sys-mysql-set-maxconnections sys-mysql-sql-reject