123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- <?php
- define('CONFIG_FILE', __DIR__ . '/config.php');
- include __DIR__ . '/functions.php';
- $cfg = [];
- load_config();
- function stat_redis($host, $port)
- {
- $stat = null;
- try {
- $redis = new Redis();
- $redis->connect($host, $port);
- $stat = $redis->info();
- $stat['server'] = "{$host}:{$port}";
- if($stat['process_id']) {
- $item = $redis->config('GET', 'maxmemory');
- $stat['maxmemory'] = $item['maxmemory'];
- $item = $redis->config('GET', 'databases');
- $stat['databases'] = $item['databases'] ? intval($item['databases']) : 16;
- }
- } catch (RedisException $e) {
- $stat = false;
- }
- return $stat;
- }
- function parse_db_stat($stat)
- {
- $ret = [];
- if (empty($stat)) {
- return $ret;
- }
- $arr = explode(',', $stat);
- foreach ($arr as $item) {
- list($k, $v) = explode('=', $item, 2);
- $ret[$k] = $v;
- }
- return $ret;
- }
- $redisStats = array();
- $redisStats['default'] = stat_redis($cfg['redis_host'], $cfg['redis_port']);
- ?>
- <!doctype html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
- <title>缓存状态监控</title>
- <style type="text/css">
- body{
- font-size: 12px;
- }
- h1{
- width: 1600px;
- }
- table{
- border-collapse: collapse;
- }
- th, td{
- padding: 2px 6px;
- border: 1px solid #000000;
- }
- tbody tr:hover{
- background-color: #DDDDFF;
- }
- td{
- text-align: right;
- }
- td ul{
- list-style: none;
- margin: 0px;
- padding: 0px;
- }
- td li{
- margin: 0px;
- padding: 0px;
- }
- .left{
- text-align: left;
- }
- .right{
- text-align: right;
- }
- .red{
- color: #FF0000;
- }
- .blue{
- color: #0000FF;
- }
- .green{
- color: #009900;
- }
- .yellow{
- color: #999900;
- }
- </style>
- </head>
- <body>
- <h1>Redis</h1>
- <table>
- <thead>
- <tr>
- <th>名称</th>
- <th>地址</th>
- <th>进程ID</th>
- <th>版本号</th>
- <th>上线时长</th>
- <th>用户CPU时长</th>
- <th>OPS/QPS</th>
- <th>总空间</th>
- <th>已用空间</th>
- <th>过期数</th>
- <th>丢弃数</th>
- <th>当前客户端</th>
- <th>阻塞客户端</th>
- <th>总接收连接数</th>
- <th>总处理指令数</th>
- <th>拒绝连接数</th>
- <th>获取命中</th>
- <th>获取未命中</th>
- <th>DB0使用</th>
- <!--
- <th>最长输出列表</th>
- <th>最大输入缓冲</th>
- -->
- </tr>
- </thead>
- <tbody>
- <?php foreach($redisStats as $name => $stats) { if (!$stats) continue; ?>
- <tr>
- <td class="left blue"><?php echo $name; ?></td>
- <td class="left"><?php echo $stats['server']; ?></td>
- <td class="<?php echo $stats['process_id'] ? '' : 'red'; ?>"><?php echo $stats['process_id'] ? $stats['process_id'] : '未启动'; ?></td>
- <td class="left"><?php echo $stats['redis_version']; ?></td>
- <td><?php echo intval($stats['uptime_in_days']) ; ?>天</td>
- <td><?php echo floatval($stats['used_cpu_user']); ?>秒</td>
- <td><?php echo $stats['instantaneous_ops_per_sec']; ?></td>
- <td class="<?php echo $stats['process_id'] && !$stats['maxmemory'] ? 'red' : ''; ?>"><?php echo $stats['process_id'] && !$stats['maxmemory'] ? '无限' : sprintf("%.2f", intval($stats['maxmemory']) / 1048576) . 'M'; ?></td>
- <td class="<?php echo $stats['maxmemory'] && $stats['used_memory'] && floatval(intval($stats['used_memory']) / intval($stats['maxmemory'])) > 0.8 ? 'red' : ''; ?>"><?php echo sprintf("%.2f", intval($stats['used_memory']) / 1048576); ?>M</td>
- <td><?php echo intval($stats['expired_keys']); ?></td>
- <td class="<?php echo $stats['evicted_keys'] ? 'red' : ''; ?>"><?php echo intval($stats['evicted_keys']); ?></td>
- <td><?php echo intval($stats['connected_clients']); ?></td>
- <td class="<?php echo $stats['blocked_clients'] ? 'red' : ''; ?>"><?php echo intval($stats['blocked_clients']); ?></td>
- <td><?php echo intval($stats['total_connections_received']); ?></td>
- <td><?php echo intval($stats['total_commands_processed']); ?></td>
- <td class="<?php echo $stats['rejected_connections'] ? 'red' : ''; ?>"><?php echo intval($stats['rejected_connections']); ?></td>
- <td><?php echo intval($stats['keyspace_hits']); ?></td>
- <td><?php echo intval($stats['keyspace_misses']); ?></td>
- <td class="left"><?php echo $stats['db0'] ? $stats['db0'] : '未使用'; ?></td>
- <!--
- <td><?php /* echo intval($stats['client_longest_output_list']); */ ?></td>
- <td><?php /* echo intval($stats['client_biggest_input_buf']); */ ?></td>
- -->
- </tr>
- <?php } ?>
- </tbody>
- </table>
- <?php foreach($redisStats as $name => $stats) { ?>
- <h1>Redis - <?php echo $name; ?></h1>
- <table>
- <thead>
- <tr>
- <th>DB序号</th>
- <th>KEY数量</th>
- <th>过期数</th>
- <th>平均有效期</th>
- </tr>
- </thead>
- <tbody>
- <?php if($stats['databases']) { for($i=0; $i<$stats['databases']; $i++) { $dbStat = isset($stats["db{$i}"]) ? parse_db_stat($stats["db{$i}"]) : []; ?>
- <tr>
- <td><?php echo $i; ?></td>
- <?php if (empty($dbStat)) { ?>
- <td>-</td>
- <td>-</td>
- <td>-</td>
- <?php } else { ?>
- <td><?php echo $dbStat['keys']; ?></td>
- <td><?php echo $dbStat['expires']; ?></td>
- <td><?php echo $dbStat['avg_ttl']; ?></td>
- <?php } ?>
- </tr>
- <?php } } ?>
- </tbody>
- </table>
- <?php } ?>
- </body>
- </html>
|