在用户发现问题前,提前知晓服务问题
服务发生问题时,无从下手;没有日志采集系统查日志,如果是负载均衡方式,不能很快定位问题
提升现有服务的服务质量,提升用户感知度,有利于调优接口性能
选型
# -*- coding:utf-8 -*-
##导入skywalking链路监控 开始
from skywalking import agent, config
#config.disable_plugins = ['sw_http_server', 'sw_urllib_request','sw_django','sw_tornado','sw_urllib3','sw_sanic','sw_aiohttp','sw_pyramid']#也可以排除一些不想纳入跟踪的组件
config.init(collector='ip:11800', service='songling') #采集服务的地址,给自己的服务起个名称
config.flask_collect_http_params = True # flask接收到的http参数也保存
agent.start()
##导入结束
import logging
from framework import app
if __name__ != '__main__': #gunicorn 启动
gunicorn_logger = logging.getLogger('gunicorn.error')
app.logger.handlers = gunicorn_logger.handlers
app.logger.setLevel(gunicorn_logger.level)
if __name__ == '__main__':#flask 启动
app.run(host=app.config["HOST"], port=app.config["PORT"], debug=app.config["DEBUG_MODEL_SWITCH"])
skywalking [MainThread] [WARNING] failed to install plugin sw_aiohttp
skywalking [MainThread] [WARNING] failed to install plugin sw_django
skywalking [MainThread] [WARNING] failed to install plugin sw_elasticsearch
这些是系统中没有引入的组件,如果发现pymysql也没有引入,是因为配置mysql驱动时需要配置成mysql+pymysql(不引入pymysql组件,跟踪中就没有访问mysql的相关数据)
SQLALCHEMY_DATABASE_URI = "mysql+pymysql://*******"
对于gunicorn发布的flask服务,一定注意
worker_class = 'sync'
worker_class不能是gevent,也不用在flask启动py中引入与gevent相关包,如import gevent.monkey.(目前还不知具体原因)
几行代码就能把需要的链路 跨度信息反馈到skywalking?
# -*- coding:utf-8 -*-
# @Time : 2021/3/4 20:27
# @Author: sl
class MyFlask():
def method_old(self):
print("假定flask执行逻辑")
_method_old=MyFlask.method_old
def method_new(this:MyFlask):
print("加入执行前逻辑")
_method_old(this)
print("加入执行后逻辑")
MyFlask.method_old = method_new #类方法替换,包装了原来的方法,类似java切面
my = MyFlask() #替换后,再涉及flask服务都会被拦截处理
my.method_old()
Apdex是用户体验指标,满意度的量化值,在0到1区间,越趋近于1,说明大部分访问的延迟是越理想的,对用户的响应很快
Service Avg Responde Time 响应时间曲线,Service Responde Time Percentile是响应时间的百分比,P75值170就是在选定的时间范围内,百分之75的请求,都在170毫秒完成
Successful Rate 如果不是100,说明在选定时间范围内,有错误的请求出现
Service Load 服务每分钟请求数
主要是以拓扑的形式展示服务和与服务交互的其他服务或数据库 中间件的调用关系,
在这可以配置一些服务所属组,来区分每个负责人,对应自己负责的服务状况
追踪某个服务的所有接口调用情况,可以查到具体调用所花费时间,请求了哪个中间件或数据库。对于数据库访问的Span可以查看具体请求的sql语句
对于Successful Rate ,CPM 等度量点,当服务的阈值触发时,可以在告警出查看异常调用。并可以通过webhook发钉钉等提示信息。
配置阈值,需要在skywalking后端配置config/ Alarm -settings.yml
如果需要具体报错信息,就需要用代码侵入方式打印日志,我们不采用此种,用ELK采集服务日志做查询与分析。