好友
阅读权限10
听众
最后登录1970-1-1
|
小国
发表于 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作为案例)
添加配置完之后就可及时监视数据库了(相当于网页版的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[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添加硬盘表
SQL语句:
SELECT
UNIX_TIMESTAMP(time) as time_sec,
speed as value,
'items_min' as metric
FROM item_per_min
6. 结句
还有一些Grafana的一些基本操作可查询官网,这里就不做介绍了,基本没有什么难度
小白第一次发帖,哪里做的不好请指教.
后续发布:利用Collectd & InfluxDb 监控服务器性能
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|