小国 发表于 2019-7-22 14:43

Grafana监控数据库 | 服务器性能

本帖最后由 小国 于 2019-7-22 17:05 编辑

前言:新人发帖,求大佬们照.本人爬虫工程师一枚.
关键词:Grafana,Mysql,Python
   1. Grafana 简介      


          在使用爬虫爬取大量数据的时候,一般我们都会把程序挂在服务器上运行,然后就可以去干别的事情了。但是,我们还是有必要定时看一下程序运行情况的。虽然我们可以通过 log 信息来监控程序运行情况,但这往往不够直观。所以,今天我就讲讲如何使用 Mysql 和 Grafana 监控爬虫程序的运行状况,并可视化。开始Grafana端口是3000,开启服务会默认开启端口.
   Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:   


   1、展示方式:快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;   


   2、数据源:Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;   


   3、通知提醒:以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;   


   4、混合展示:在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;   


   5、注释:使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;   6、过滤器:Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。


2. Grafana 下载及运行
   1、下载      

               官网下载地址:Grafana      https://grafana.com/grafana/download
      
               安装指南:Grafana安装指南               https://grafana.com/docs/installation/debian/

               官方安装,因系统不同就不做演示了,实在不会可百度(万能的度娘)

   2、运行
下载安装完成后,输入命令 service grafana-server start 启动服务,打开浏览器,输入IP+端口,3000为Grafana的默认侦听端口。         


         系统默认用户名和密码为admin/admin,第一次登陆系统会要求修改密码,修改密码后登陆       注:直接下载运行即可,如想修改内置配置文件,可自行百度.

3. Grafana 使用-添加Mysql数据源(这里以Mysql作为案例)
      
      


      添加配置完之后就可及时监视数据库了(相当于网页版的Navicat)

      先不要急,拿我自身案例做例子,我这里用是Python语言,,,监控一个表的一分钟入库情况(用处:实时监控数据库的插入情况)


4. Python代码(插入监控数据)
   这里,我们要每隔一定时间查询爬取总量,并计算爬取速度。下面是一个例子:

   代码分为两部分,首先是在我们存放 item 的数据库建立两个表,每个表有两个字段,一个是查询时间,另一个是 item_total / item_min。

      因格式问题,我这里就直接发图了.
   
   

    代码第二部分是主函数,每隔一分钟查询 items 数,并计算爬取速度,将得到的数据储存起来(item_table参数是要监视的表)



   
全部Python代码(可结合上图改写其他语言):

import pymysql as mdb
import time

# 存放爬取数据的数据库(这里我把统计的数据,存入了爬取数据所在的数据库)
DB_NAME = 'db_name'
TABLE_NAME1 = 'item_per_min'
TABLE_NAME2 = 'item_total'
host = 'your_server_ip'
user = 'your_user_name'
passwd = 'your_pwd'

# 爬取的 item 存放的表
item_table = 'item_table'

def create_table():
    use_db_str = 'use ' + DB_NAME
    create_table_str1 = "CREATE TABLE if not exists " + TABLE_NAME1 + """(
      `time` datetime NOT NULL,
      `speed` int NOT NULL DEFAULT '0'
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"""

    create_table_str2 = "CREATE TABLE if not exists " + TABLE_NAME2 + """(
      `time` datetime NOT NULL,
      `total` int NOT NULL DEFAULT '0'   
      ) ENGINE=InnoDB DEFAULT CHARSET=utf8;"""

    # 数据库连接
    conn = mdb.connect(host, user, passwd)
    cursor = conn.cursor()
    try:
      cursor.execute(use_db_str)
      cursor.execute(create_table_str1)
      cursor.execute(create_table_str2)
      conn.commit()
    except Exception as e:
      print(e)
if __name__ == '__main__':
    # 创建表
    create_table()
    conn = mdb.connect(host, user, passwd, DB_NAME)
    cursor = conn.cursor()

    before_item = 0
    while True:
      try:
            cursor.execute('SELECT count(*) FROM %s', item_table )
            result = cursor.fetchone()
            current_item = result
            print(current_item)

            # 过去一分钟爬取量
            cursor.execute('insert into %s values (now(), %s)' % (TABLE_NAME1, current_item - before_item))
            # 爬取总量
            cursor.execute('insert into %s values (now(), %s)' % (TABLE_NAME2, current_item))

            conn.commit()
            before_item = current_item
      except Exception as e:
            print(e)
      time.sleep(60)

5. 服务器后台运行代码及Grafan展示(环境:CentOS7.4 64位)

    1.服务器操作
         在服务器后台运行PY文件---nohup(主要服务器不关机后台运行),这里py文件名是test.py

         nohup python3 test.py &      (服务器后台运行,可关闭xshell,服务器不关机及可)

         ps -ef | grep test.py               (查询文件是否运行,及文件的id)

         kill -9 id                                 (如想关闭输出查到ip,杀掉即可)



    2.这个时候数据以及开始进数据了,这是关键时刻到了,在Grafana添加硬盘表

         
         
SQL语句:
SELECT
UNIX_TIMESTAMP(time) as time_sec,
speed as value,
'items_min' as metric
FROM item_per_min


6. 结句


    还有一些Grafana的一些基本操作可查询官网,这里就不做介绍了,基本没有什么难度
    小白第一次发帖,哪里做的不好请指教.
    后续发布:利用Collectd & InfluxDb 监控服务器性能
   





lf1988103 发表于 2019-7-22 21:48

不错 谢谢分享

小国 发表于 2019-7-22 23:08

lf1988103 发表于 2019-7-22 21:48
不错 谢谢分享

:lol:lol嘿嘿。一块学习
页: [1]
查看完整版本: Grafana监控数据库 | 服务器性能