Grafana简介

Grafana allows you to query, visualize, alert on and understand your metrics no matter where they are stored. Create, explore, and share dashboards with your team and foster a data driven culture.

从上文得知,Prometheus部署配置完成后,官方提供了三种可视化方案:

  • EXPRESSION BROWSER(Prometheus自带的/graph界面)
  • GRAFANA(绝配)
  • CONSOLE TEMPLATES(使用 Go 模板语言创建自定义控制台,有学习和开发曲线)

使用GRAFANA实现可视化是低成本、高回报的体现,并且可以使用社区中的开源DASHBOARD(仪表盘),简直是开箱即用了。

以下是Grafana的安装部署、数据源接入、仪表盘等内容。

阅读全文 »

前言

最近专注于Go语言学习,除开兴趣使然,也意识到他在云原生领域大放异彩,众多开源项目也是鼎鼎大名,例如DockerKubernetesInfluxDBGrafana等,这里从监控场景经常接触的Prometheus开始,掌握它的基础架构、使用场景和部署与集成。

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库,2016年,由Google发起的Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation)将Prometheus纳入其第二大开源项目。

在云原生时代,随着容器技术的迅速发展,Kubernetes生态已然成为大家追捧的容器集群管理系统,而Prometheus 作为 CNCF 生态圈中的重要一员,其活跃度仅次于 Kubernetes,现已广泛用于 Kubernetes 集群的监控系统中。

Prometheus 提供了一整套监控体系,包括数据的采集、数据存储、报警,、甚至是绘图(不太好用,官方也推荐使用 Grafana)。

以下暂且介绍Prometheus的部署、配置和可视化。

阅读全文 »

前言

​ 由于工作中都是用Django + DRF来后端开发,Django虽然很生态很丰富、开箱即用也很美好,但是在某些场景中,并不需要这么多功能,后端只需提供json化的api即可,这样我就关注到了FastAPI,首先听闻它的性能可以比肩JAVA的框架,而且是异步非阻塞的,天生支持async、await,类似于flask的语法和风格也很吸引我,所以我就琢磨,能不能在之前的开发框架中,替换掉Django,使用FastAPI?很显然工作量是巨大的,需要支持已有的Login、Csrf、用户等功能,而且需要满足作为SaaS的docker部署流程。总之路很漫长,先从FastAPI的基础学起。


FastAPI 是一个用于构建 API 的现代、快速(高性能)的 web 框架,使用 Python 3.6+ 并基于标准的 Python 类型提示。

关键特性:

  • 快速:可与 NodeJSGo 比肩的极高性能(归功于 Starlette 和 Pydantic)。最快的 Python web 框架之一
  • 高效编码:提高功能开发速度约 200% 至 300%。
  • 更少 bug:减少约 40% 的人为(开发者)导致错误。
  • 智能:极佳的编辑器支持。处处皆可自动补全,减少调试时间。
  • 简单:设计的易于使用和学习,阅读文档的时间更短。
  • 简短:使代码重复最小化。通过不同的参数声明实现丰富功能。bug 更少。
  • 健壮:生产可用级别的代码。还有自动生成的交互式文档。
  • 标准化:基于(并完全兼容)API 的相关开放标准:OpenAPI (以前被称为 Swagger) 和 JSON Schema

先来实现一个sayhello的简单应用吧,以下使用FastAPI + SQLAlchemy(sqlite3) + html + css + vue.js + axios。

源码地址https://github.com/sususama5555/fastapi-sayhello

阅读全文 »

前言

命令行模式在Python开发中并不陌生,简单的说就是python hello_world.py这种使用命令的模式运行Python程序。目前比较主流的命令行工具主要有以下几项,

  • 内置的sys
  • argparse
  • tensorflow的Flags

当然,还有例如Fire、Docopt等工具,这里不一一展开。

本文的主角是Click,因为它真的很强大、很好用。以下概括性的讲解一下上述三款命令行工具,以及重头戏Click

阅读全文 »

前言

装饰器*(Decorator)* 是 Python 里的一种特殊工具,它为我们提供了一种在函数外部修改函数的灵活能力。它有点像一顶画着独一无二 @ 符号的神奇帽子,只要将它戴在函数头顶上,就能悄无声息的改变函数本身的行为。

我与装饰器应该打过了不少交道。在做面向对象编程时,就经常会用到 @staticmethod@classmethod 两个内置装饰器。此外,如果你接触过 click 模块,就更不会对装饰器感到陌生。click 最为人所称道的参数定义接口 @click.option(...) 就是利用装饰器实现的。

除了用装饰器,我们也经常需要自己写一些装饰器。在这篇文章里,我将从 最佳实践常见错误 两个方面,与分享有关装饰器的一些小知识。

阅读全文 »

Python 里的分支

Python 支持最为常见的 if/else 条件分支语句,不过它缺少在其他编程语言中常见的 switch/case 语句。

除此之外,Python 还为 for/while 循环以及 try/except 语句提供了 else 分支,在一些特殊的场景下,它们可以大显身手。

下面从 最佳实践常见技巧常见陷阱 三个方面聊聊如何编写优秀的条件分支代码。

阅读全文 »

前言

在循环语法方面,Python 表现的即传统又不传统。它虽然抛弃了常见的 for (init; condition; incrment) 三段式结构,但还是选择了 forwhile 这两个经典的关键字来表达循环。绝大多数情况下,我们的循环需求都可以用 for <item> in <iterable> 来满足,while <condition> 用的则更少。

虽然循环的语法很简单,但是要写好它确并不容易。以下,我们来探讨什么是“地道“的循环代码,以及如何编写它们。

阅读全文 »

Django 版本:2.2.6

本文并不局限于某一个 Django 版本但都会尽量讨论版本 2.0+

流程总览

Django 处理请求流程

概述:

Django 和其他 Web 框架的 HTTP 处理的流程大致相同:先通过 Request Middleware 对请求对象做定义处理,然后再通过默认的 URL 指向的方法,最后再通过 Response Middleware 对响应对象做自定义处理。

阅读全文 »

前言

文件操作,是开发过程中最常需要解决的任务之一。

当我们编写与文件相关的代码时,通常会关注这些事情:我的代码是不是足够快?我的代码有没有事半功倍的完成任务?

在这篇文章中,会推荐一个被低估的 Python 标准库模块、演示一个读取大文件的最佳方式、最后再分享函数设计的一点思考。

注意:因为不同操作系统的文件系统大不相同,本文的主要编写环境为 Mac OS/Linux 系统,其中一些代码可能并不适用于 Windows 系统。

建议一:使用 pathlib 模块

在 Python 里进行文件处理,一定无法避开标准库中的 osos.path 两个模块。在这两个模块里,有着非常多与文件路径处理、文件读写、文件状态查看相关的工具函数。

阅读全文 »

gRPC 是什么?

gRPC是Google公司基于Protobuf开发的跨语言的开源RPC框架。gRPC基于HTTP/2协议设计,可以基于一个HTTP/2链接提供多个服务,对于移动设备更加友好。

在 gRPC 里客户端应用可以像调用本地对象一样直接调用另一台不同的机器上服务端应用的方法,使得您能够更容易地创建分布式应用和服务。与许多 RPC 系统类似,gRPC 也是基于以下理念:定义一个服务,指定其能够被远程调用的方法(包含参数和返回类型)。在服务端实现这个接口,并运行一个 gRPC 服务器来处理客户端调用。在客户端拥有一个存根能够像服务端一样的方法。

阅读全文 »