shitou's blog 
Home About Feed | MIX BOY 塌客

Tags "监控"

21
May

服务器监控小脚本 by shitou

0

监控服务器存活的脚本,用ruby写的,需要安装有action_mailer gem,

功能:

检测主机的80端口是否可用

失败次数记录,超过指定次数判定主机Down掉

发送通知邮件到指定邮箱


在前面的日志中有说明怎样连接gmail来发送邮件的


require 'rubygems'
require 'action_mailer'
require 'ping'
require 'fileutils'
require 'tlsmail' #need install tlsmail gem to support TLS connect
Net::SMTP.enable_tls(OpenSSL::SSL::VERIFY_NONE)

#发送通知from账户设置
ActionMailer::Base.smtp_settings = {
  :address => 'smtp.gmail.com',
  :port => '25',
  :domain => 'gmail.com',
  :user_name => 'username',
  :password => 'passwd',
  :authentication => :login
}

#recp: 收到通知的邮箱地址,可以填多个地址,逗号分隔
#sub: 邮件主题
#bo: 邮件内容
class SimpleMailer < ActionMailer::Base
  def simple_message(recp, sub, bo)
    from 'sender@gmail.com'
    recipients recp
    subject sub
    body bo
  end
end

class ServerMonitor
  def initialize
    #config
    @hit = 5  #最大失败次数,达到后才会发送邮件,避免误报
    @tmp = "/tmp/server_monitor_tmp"  #计数器地址
    @recp = 'mytake6@gmail.com, std8545@yahoo.com.cn'  #收信的邮箱地址
    @host = ['www.ccok.me', 'www.google.com']  #需要监控的主机
    
    #do not touch these
    @hosts = Struct.new(:host, :status)
    @servers, @msg = [], []
    @host.each { |h| @servers << @hosts.new(h, true) }
    
    FileUtils.mkdir(@tmp) unless File.exists? @tmp
  end
  
  def run
    @servers.each do |s| 
      num = Ping.pingecho(s.host, 5, 80) ? 0 : rf(s.host) + 1
      File.open(dest(s.host), 'w') { |f| f.puts num }
    end

    @servers.each do |e|
      if rf(e.host) == @hit
        e.status = false
        File.open(dest(e.host), 'w') { |f| f.puts 0 }
      end
    end
    
    send_mail
  end
  
  def rf file
    return 0 unless File.exist?(dest(file))
    File.open(dest(file), 'r').readlines.to_s.chomp.to_i
  end
  
  def dest host
    "#{@tmp}/#{host}"
  end
  
  def send_mail
    @servers.each { |m| @msg << m.host unless m.status }
    SimpleMailer.deliver_simple_message @recp, 
        "server monitor", 
        @msg.join(', ') + " is Down!!! " unless @msg.empty?
  end
end

#go
ServerMonitor.new.run


可以放到crontab中每2分钟运行一次


Tags: 监控,ruby,linux

2009-05-21 14:20:44, 589 reviews

send to mailbox

Your email:

11
Oct

mysqlreport详解 by shitou

2
最近在玩mysqlreport, 在网上找到一篇台湾人汉化的文档.但发现没有 innodb 部分的说明.
于是,参考官方的文档, 补充了一下innodb部分. 如下:

下面的图表只输出innodb部分, 要查看全部信息, 点击下面的url
官方: http://hackmysql.com/mysqlreportguide
一篇台湾作者汉化的文档: http://forum.slime.com.tw/thread208416.html

__ InnoDB Buffer Pool __________________________________________________
Usage           7.97M of   8.00M  %Used:  99.61
Read hit      100.00%

Pages
  Free              2            %Total:   0.39
  Data            499                     97.46 %Drty:   0.00
  Misc             11                      2.15
  Latched           0                      0.00

Reads         101.06M     8.5/s
  From file       373     0.0/s            0.00
  Ahead Rnd        19     0.0/s
  Ahead Sql        13     0.0/s

Writes        860.88k     0.1/s
Flushes       254.62k     0.0/s
Wait Free           0       0/s

__ InnoDB Lock _________________________________________________________
Waits             424     0.0/s
Current             0
Time acquiring
  Total        254266 ms
  Average         599 ms
  Max           39559 ms

__ InnoDB Data, Pages, Rows ____________________________________________
Data
  Reads           502     0.0/s
  Writes      344.09k     0.0/s
  fsync       158.03k     0.0/s
  Pending
    Reads           0
    Writes          0
    fsync           0

Pages
  Created         699     0.0/s
  Read            523     0.0/s
  Written     254.62k     0.0/s

Rows
  Deleted       4.59k     0.0/s
  Inserted     74.16k     0.0/s
  Read         94.67M     8.0/s
  Updated      40.61k     0.0/s

第一区块, 展示了 mysql innodb 的缓存统计信息. 
其中, innodb跟myisam的缓存机制有较大区别, innodb不仅缓存索引,还缓存一些表数据.而myisam只缓存索引.
Usage           7.97M of   8.00M  %Used:  99.61
Read hit      100.00%
Usage 表示, 总的缓存中, 当前已占用 7.97M, 使用率达 99.61%. 这种情况, 是存在瓶颈的, 需要适当增加缓存总量.
Read hit 表示缓存命中率 100%, 这个数值是比较理想的, 一般情况下, 都应该大于 99.98%.
Pages
Free              2            %Total:   0.39
Data            499                     97.46 %Drty:   0.00
Misc             11                      2.15
Latched           0                      0.00
innodb的存储是按页分的, 每页的容量默认是 16K. (详见 http://www.mysqlperformanceblog.com/2006/06/04/innodb-page-size/)

这里的,Free指的是缓存中的总页数, 剩余的页, 占总的 0.39%.
Data是指缓存中, 存储索引数据的页的数量.其中, 最后一项 %Dtry 表示脏数据的百分比.所谓的脏数据是指, 对缓存数据更新后, 没有同步到硬盘的数据.
misc 和 latched 就是之前说的其他信息的一些缓存.
Reads         101.06M     8.5/s
From file       373     0.0/s            0.00
Ahead Rnd        19     0.0/s
Ahead Sql        13     0.0/s
Reads代表从缓存里, 总共读取了多少M的数据.
From file, 表示从硬盘文件中读取到缓存里的页数量.
Ahead Rnd, 表示随机预读的次数.
Ahead Sql, 表示全表扫描时, sql预读的次数.
Writes        860.88k     0.1/s
Flushes       254.62k     0.0/s
Wait Free           0       0/s
Writes , 表示写入缓存的总大小.
Flushes , 表示缓存数据更新到硬盘的大小.
Waint Free, 表示, 等待可写入数据的页的次数.
这里为什么会等待, 是因为, 数据写入到缓存页时, 必须保证, 这个页被创建好, 或者这个页之前的数据已经被同步到硬盘上.
Waits             424     0.0/s
Current             0
Time acquiring
  Total        254266 ms
  Average         599 ms
  Max           39559 ms
Waits , 表示执行线程等待锁的释放的次数.
Current, 表示当前所有的执行线程, 正在等待锁的数量.
Time acquiring 里的 Total , 指的是, 等待锁所消耗的总时间.
Average, 是指, 平均消耗的时间.
Max, 是指, 单次等待锁, 所消耗最多的时间.
Data
  Reads           502     0.0/s
  Writes      344.09k     0.0/s
  fsync       158.03k     0.0/s
Pending
    Reads           0
    Writes          0
    fsync           0
Data里的Reads, 表示数据读取的次数.
Writes, 表示数据写入的数据量大小.
fsync, 表示缓存同步到硬盘的数据量大小.

Pending里的Reads, Writes, fsync , 表示当前进行读写, 同步的次数.
Pages
  Created         699     0.0/s
  Read            523     0.0/s
  Written     254.62k     0.0/s
Pages 里的created, 表示, 总共创建过 699 个页.
Read, 表示被读取的页的数量.
Written, 表示写入到页里的,总大小.
Rows
Deleted       4.59k     0.0/s
Inserted     74.16k     0.0/s
Read         94.67M     8.0/s
Updated      40.61k     0.0/s
Rows里的四个操作,分别代表删除, 插入, 查询, 更新的数据量大小.

性能关注点分析

首先是Usage, 如果占比达 90 - 95%以上, 可能需要增加预设缓存大小.
调整的参数是 innodb_buffer_pool_size

其次是 Read Hit, 即缓存命中率, 如果该值远远小于100%, 就要调查缓存的有效性了.
比如, 缓存写次数是否大于查询次数. (Buffer里的reads和writes)

最后,需要关注的是, 数据的读写比例. 这里有个要注意的地方是, mysql如果启动到现在不到24小时或一个较长的运行周期, 这个读写比例值可能是不准的.

一般的应用,我感觉读写比例在 8/2 差不多. 如果读远远大于写, 那么你可以测下 MyISAM 引擎的性能, 看看是否适合你.
转载自javaeye
Tags: mysql,监控

2008-10-11 15:19:40, 378 reviews

send to mailbox

Your email:

22
Sep

监控mysql的性能 by shitou

0

前面一篇日志中说明了怎样安装MySQL的监控工具,这里说下如何通过监控工具得到的数据来看判断MySQL的运行状况

 

在MYSQL的官方网站找到了一篇这方面的文章,地址

后来找到了一篇对应的中文翻译,地址

 

这里列出了一些如何监视你安装的mysql性能的一些ideas。监视总是一个持续的过程。你需要知道哪种模式对你的数据库是好的,什么是问题的表象,甚至是危险的情况。
一下列出了用来去监视你的系统的主要参数:
- mysqladmin extended (绝对值)
- mysqladmin extended -i10 -r (相对值
)
- mysqladmin processlist
- mysql -e "show innodb status"
- OS data. vmstat/iostat
- MySQL error log
- InnoDB tablespace info.

1) mysqladmin extended (绝对值)
重点去监视的值有:
* Slave_running:如果系统有一个从复制服务器,这个值指明了从服务器的健康度
* Threads_connected:当前客户端已连接的数量。这个值会少于预设的值,但你也能监视到这个值较大,这可保证客户端是处在活跃状态。
* Threads_running:如果数据库超负荷了,你将会得到一个正在(查询的语句持续)增长的数值。这个值也可以少于预先设定的值。这个值在很短的时间内超过限定值是没问题的。当Threads_running值超过预设值时并且该值在5秒内没有回落时, 要同时监视其他的一些值。
2)mysqladmin extended(计数器)
* Aborted_clients:客户端被异常中断的数值(因为连接到mysql服务器的客户端没有正常地断开或关闭)。对于一些应用程序是没有影响的,但对于另一些应用程序可能你要跟踪该值,因为异常中断连接可能表明了一些应用程序有问题。
* Questions:每秒钟获得的查询数量。也可以是全部查询的数量(注:可以根据你输入不同的命令会得到你想要的不同的值)。
* Handler_*:如果你想监视底层(low-level)数据库负载,这些值是值得去跟踪的。如果Handler_read_rnd_next值相对 于你认为是正常值相差悬殊,可能会告诉你需要优化或索引出问题了。Handler_rollback表明事务被回滚的查询数量。你可能想调查一下原因。
* Opened_tables:表缓存没有命中的数量。如果该值很大,你可能需要增加table_cache的数值。典型地,你可能想要这个值每秒打开的表数量少于1或2.
* Select_full_join: 没有主键(key)联合(Join)的执行。该值可能是零。这是捕获开发错误的好方法,因为一些这样的查询可能降低系统的性能。
* Select_scan:执行全表搜索查询的数量。在某些情况下是没问题的,但占总查询数量该比值应该是常量(注:Select_scan除以总查询数量商应该是常数)。如果你发现该值持续增长,说明需要优化,缺乏必要的索引或其他问题。
* Slow_queries:超过该值(--long-query-time)的查询数量,或没有使用索引查询数量。对于全部查询会有小的冲突。如果该值增长,表明系统有性能问题。
* Threads_created:该值应该是低的。较高的值可能意味着你需要增加thread_cache的数值,或你遇到了持续增加的连接,表明了潜在的问题。
3)mysqladmin processlist or "SHOW FULL PROCESSLIST"命令
你可以通过使用其他的统计信息得到已连接线程数量和正在运行线程的数量,检查正在运行 的查询花了多长时间是一个好主意。如果有一些长时间的查询(由于很差的构思或公式),管理员可以被通知。你可能也想了解多少个查询是在"Locked"的 状态—---该值作为正在运行的查询不被计算在内而是作为非活跃的。一个用户正在等待一个数据库响应。
4) "SHOW INNODB STATUS"命令
该语句产生很多信息,从中你可以得到你感兴趣的。首先你要检查的就是“从最近的XX秒计算出来的每秒的平均负载”。
* Pending normal aio reads: 该值是innodb io请求查询的大小(size)。如果该值大到超过了10—20,你可能有一些瓶颈。
* reads/s, avg bytes/read, writes/s, fsyncs/s:这些值是io统计。对于reads/writes大值意味着io子系统正在被装载。适当的值取决于你系统的配置。
* Buffer pool hit rate:这个命中率非常依赖于你的应用程序。当你觉得有问题时请检查你的命中率
* inserts/s, updates/s, deletes/s, reads/s:有一些Innodb的底层操作。你可以用这些值检查你的负载情况查看是否是期待的数值范围。
4)OS数据。查看系统状态好的工具是vmstat/iostat/mpstat,这些可以看man手册
5)MySQL错误日志-----在服务器正常完成初始化后,什么都不会写到错误日志中,因此任何在该日志中的信息都要引起管理员的注意。
6)InnoDB表空间信息。InnoDB仅有的危险情况就是表空间填满----日志不会填满。检查的最好方式就是:show table status;你可以用任何InnoDB表来监视InnoDB表的剩余空间。

 

只做一下说明,上面文章中提到的各种参数,其中判断最主要的数据来源总结一下主要来自:

 

1.mysqlreport工具

2.show innodb status;

3.show table status;

 

根据以上结果的输出,结合几项重要参数值来做判断

 

mysqltuner是一个傻瓜式的MySQL优化工具,工具的运行结果会直接给出my.cnf应做如何的参数设置和调整,也是一个不错的工具

还有就是MySQL官方的数据库管理工具MySQL Administrator也有性能监控的功能,类似于windows的任务管理器

 

Tags: 监控

2008-09-22 13:31:16, 623 reviews

send to mailbox

Your email:

19
Sep

innotop / mysqlreport / mtop / DBD::mysql by shitou

1

最近在看mysql性能监控这方面,以前用过mysqltuner, 现在在关注innotop, mtop和mysqlreport, 由于这三个工具都是perl编写的, 并且都依赖于DBD::mysql模块, 所以在使用之前要先先安装DBD::mysql

 

DBD::mysql

由于DBD::mysql又依赖于DBI模块所以先安装DBI模块:

$perl -MCPAN -e "install DBI"

就行了

 

由于我系统中的mysql是从源码包编译安装的,安装的路径为/usr/local/mysql, mysql的库文件(lib)和头文件(include)不在默认的标准路径中,所以在通过CPAN安装DBD::mysql的时候会失败,这里去CPAN下载下来DBD-mysql-4.008.tar.gz文件,手动安装:

 

这个模块的安装不能像安装其他perl module一样执行perl Makefile.PL; make; make install, 因为它需要知道mysql的库文件和头文件位置,它在执行perl Makefile.PL时会自动去执行mysql_config(该程序随mysql发行, 位于mysql目录的bin中),得到mysql的参数,其中有cflag和lib的路径, 但是该程序的输出在编译安装的mysql中默认就是错误的,所以不能简单执行perl Makefile.PL, 必须指定mysql头文件和库文件的位置

 

$tar zxvf DBD-mysql-4.008.tar.gz

$export PATH=$PATH:/usr/local/mysql/bin

$perl Makefile.PL --libs='-L/usr/local/mysql/lib -lmysqlclient' --cflag='-I/usr/local/mysql/include'

$make; make install

 

然后再把mysql的库文件加入系统库的路径,不这样的话后面在使用innotop和mysqlreport时会报错,

$echo /usr/local/mysql/lib >> /etc/ld.so.conf

$ldconfig

 

Innotop

然后再安装innotop:

安装依赖的module

$perl -MCPAN -e shell

cpan>install Term::ReadKey

cpan>exit

$perl Makefile.PL; make; make install

innotop使用看help

 

mysqlreport

这样就行了,mysqlreport不用安装直接使用即可,

$./mysqlreport --user=NAME --password=PWD

 

mtop

mtop类似于系统的top, 对mysql进行即时监控

mtop依赖的module比较多, 除了上面提到的DBI和DBD::mysql外, 其他的见mtop的README, 直接用CPAN在线安装即可

使用直接:

$mtop

然后输入mysql的用户名和密码即可

 

 

Tags: 监控

2008-09-19 14:17:50, 1027 reviews

send to mailbox

Your email:

Tags

U-ka saegusa IN db command Mai Kuraki Norah Jones log iPhoneException ACG Mac Safari objective-c CouchDB LVS AJAX debian 推荐 AMQP google mail bug gettext Erlang 北京 iptables 架构 tips mysql backup function 我看 postfix 监控 SEO cache Etag memcache thread 进程 线程 无锡 yield file column mixboy xml rss gems ruby shitou shell lighttpd 安全 csrf 公司 nginx linux 模块 apache webserver 朋友 大学 生活 尼古拉斯凯奇 movie 文件同步 笑笑 歌词 auto complete plugin rails music ubuntu blog

Category

  • iPhone[17]
  • Erlang[4]
  • google[8]
  • 生活[38]
  • 音乐[11]
  • 电影[11]
  • linux[20]
  • web server[6]
  • mail server[3]
  • cluster[1]
  • system manage[5]
  • ruby[18]
  • ruby on rails[27]
  • 开源[3]

Episode

  • iPhoneException
  • shell
  • thread
  • memcache

Recent Comments

  • я считаю: превосходно. мамба интим знакомс...
  • [b]Comprar vardenafil 20mg en Mexico Sin Receta...
  • [b]Comprar vardenafil 20mg en Mexico Sin Receta...
  • [b]Comprar vardenafil 20mg en Mexico Sin Receta...
  • [b]Comprar vardenafil 20mg en Mexico Sin Receta...
  • [b]Comprar vardenafil 20mg en Mexico Sin Receta...
  • [b]Comprar vardenafil 20mg en Mexico Sin Receta...
  • [b]Comprar vardenafil 20mg en Mexico Sin Receta...
  • [b]Comprar vardenafil 20mg en Mexico Sin Receta...
  • я думаю: восхитительно.. познакомлюсь ради...

Popular Posts

  • MySQL Innodb备份
  • 准备开始学习Erlang了(恶狼, 二郎..)
  • Lighttpd配置参数
  • iPhone上的HelloWorld终于跑起来了
  • Etag和Expire

Recommended Posts

  • Mai Kuraki -永远より ながく
  • U-ka saegusa IN db Final Best
  • Heaven Can Wait - Charlotte Gainsbou
  • Ruby遍历MemCached的key
  • Norah Jones - The fall
  • 请记得仰望梦想的姿势
  • Shell: 统计MySQL InnoDB表的大小
  • Rails Benchmark
  • 发送异常到邮箱
  • I Miss Nobody
  • Music4u, Vol. 1
  • my macbook
  • Mai Kuraki-Beautiful
  • 10首最伤情英文歌曲精选
  • Mai Kuraki - PUZZLE/Revive

Friends' blogs

  • levy
  • sphance
  • andreas

Login

   注册

留言 查看留言

留言

   取消

留言 查看留言


Statistics

  • 访问次数: 51664
  • 今天访问: 131
  • 日志: 172
  • 评论: 138
  • 音乐: 9
  • 用户: 150


 

just DO NOT support IE

close