吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 4774|回复: 2
收起左侧

[其他转载] Grafana监控数据库 | 服务器性能

  [复制链接]
小国 发表于 2019-7-22 14:43
本帖最后由 小国 于 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作为案例)
       配置MYSQL.jpg
       MYSQL配置2.png


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

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


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

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

      因格式问题,我这里就直接发图了.
     
      Python代码1.png

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



    Python代码2.png
全部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[0]
            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添加硬盘表

          仪盘表1.png
          仪盘表2.jpg
SQL语句:
SELECT
  UNIX_TIMESTAMP(time) as time_sec,
  speed as value,
  'items_min' as metric
FROM item_per_min


6. 结句


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





免费评分

参与人数 1吾爱币 +1 热心值 +1 收起 理由
lf1988103 + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lf1988103 发表于 2019-7-22 21:48
不错 谢谢分享
 楼主| 小国 发表于 2019-7-22 23:08
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-16 11:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表