自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(54)
  • 问答 (1)
  • 收藏
  • 关注

原创 kibana自动补全功能失效的几个原因

原理:kibana 的 Dev Tools 页面第一次加载时,会自动从 ES 获取所有 index 及 alias 名称列表、所有 index mappings、所有 _template 名称列表。这样才能在用户手写查询语句时,自动补全。如果勾选上了,却依然不能自动补全,则开浏览器的 F12 窗口,重新加载 kibana 网页,查看 HTTP 请求是否成功。如果不能自动补全field,则开浏览器的 F12 窗口,重新加载 kibana 网页,查看 HTTP 请求是否成功。

2024-03-04 12:04:49 408

原创 vi/vim 编辑时会创建交换文件、备份文件,改变 inode

保存文件时(即使未修改),vi/vim 会将当前内容保存到源文件。用 vi/vim 命令打开文件时(即使未修改),会在源文件的同一目录下(而不是执行命令的目录),创建一个名为。可临时修改 vim 的配置参数,也可以将配置参数永久保存到。

2023-11-23 15:37:23 664

原创 今天开始,ubuntu 18.04 bionic 主机不能从 ppa:deadsnakes 仓库下载 Python 包

ppa:deadsnakes 仓库今天停止维护旧版本 Ubuntu ,删除了针对 Ubuntu bionic 18.04 的所有 Python 预编译包。2023年6月6日 官方公告因此主机操作系统是 Ubuntu 18.04 bionic 的用户,不能从 ppa:deadsnakes 仓库下载 Python 包。而主机操作系统是 Ubuntu 20.04 focal、Ubuntu 22.04 jammy 的用户,可以继续从 ppa:deadsnakes 仓库下载 Python 包。

2023-06-06 16:28:37 956

原创 Kafka rebalance 的几种原因与解决方案

JoinGroupmember idStatic Memberrejoin

2023-02-18 21:28:59 3972

原创 Linux进程、Cgroup、容器的内存指标

在 Linux 上监控内存开销时,存在多种指标,本文区分它们的定义、用途。

2022-11-03 17:29:33 3665

原创 netfilter、iptables、firewalld 的关系、区别

netfilter 是 Linux 内核的一个网络框架,提供了数据包过滤(包括无状态包、有状态包)、NAT 等功能

2022-11-01 16:58:10 716

原创 用电话比喻计算机网络协议

用电话比喻计算机网络协议

2022-09-18 15:35:41 389

原创 【kubelet 报错】Failed to activate service ‘org.freedesktop.systemd1‘: timed out

kubelet、systemd 报错

2022-09-02 21:49:57 7096 2

原创 Jenkins 导出、导入 Job Pipeline

通过 Python 脚本导出、导入 Jenkins 的 Job 配置

2022-07-22 15:53:57 4249 4

原创 哈希列表、哈希链、哈希树

通过哈希算法检验大量数据(比如大量文件)的一致性时,常见的存储方案:哈希列表(Hash List)原理:计算每个数据的哈希值,保存为一个列表。记录该列表的哈希值,用于检验整体的一致性。当发现整个 Hash List 的哈希值变化时,需要遍历检验每个数据的哈希值是否变化,从而找出变化的数据。时间复杂度为 O(n) 。哈希链(Hash Chain)原理:计算每个数据的哈希值。将两个数据的哈希值组合,计算哈希值,再与下一个数据的哈希值组合,计算哈希值。以此类推,最后得到链尾

2021-12-14 11:59:33 2801

原创 Python 3.10 版本号引发的 bug

2021年10月,Python 的 3.10 版本正式发布。但之前的 Python 3.6、3.7、3.8、3.9 子版本都为个位数,程序员可能习惯了这种版本格式,因此编写涉及版本号的代码时,未曾考虑到 3.10 版本。本位列举一些相关bug,已在笔者的旧代码中出现,需要修复。版本号为数值类型?有的代码会将版本号保存为数值类型,便于比较大小:>>> 3.8 < 3.9 # 以前可以这样比较版本号True>>> 3.8 < 3.10 #

2021-10-27 23:38:18 1375 2

原创 Linux 主流发行版的特点、历史关系

文章目录Linux内核发行版FedoraRHELCentOSDebianUbuntuMintopenSUSESLESLFSArchGentooLinux发音为 /ˈlɪnəks/ 。历史:1991 年,芬兰的程序员 Linus Torvalds 开发了 Linux 内核,将它按 GPL 协议授权为自由软件。Linux 内核与诸多 GNU 软件组合在一起,构成了一个操作系统,称为 GNU/Linux 。2007 年,开源发展实验室(Open Source Development Labs,OS

2020-12-09 23:47:15 811

原创 Django admin 增加只读的详情页面

问题在 Django admin 页面点击一个条目时,会显示其详情页面。原理:详情页面的 URL 总是 <path:object_id>/change/ ,如果用户只有查看权限( has_view_permission )则将所有字段显示成只读形式,如果用户有修改权限( has_change_permission )则将字段显示成可以修改的形式。对应的源码:# django/contrib/admin/options.pyclass ModelAdmin(BaseModelAdmin)

2020-11-25 16:21:59 1286 2

原创 区分 Nginx 的 proxy_buffering 与 proxy_cache

当 Nginx 将客户端的请求转发给 proxy_pass 上游服务器时,默认会启用缓冲,但不会启用缓存。缓冲(buffer):Nginx 将上游服务器的响应报文保存几秒钟,等整个接收之后,再发送给客户端。会作用于所有响应报文。可以尽早与上游服务器断开连接,减少其负载。但是会增加客户端等待响应的时间。如果不启用缓冲,则 Nginx 收到上游服务器的一部分响应就会立即发送给客户端,通信延迟低。缓存(cache):Nginx 将上游服务器的响应报文保存几分钟,当客户端再次请求同一个响应

2020-11-09 17:53:58 772

原创 修改 unittest 发现测试方法的规则

文章目录代码运行效果unittest 能自动发现并执行测试用例,规则如下:首先指定要查找的目录(默认是当前目录)。如果子目录属于 Python 包,则也加入查找范围。然后在该目录下查找名称匹配 test*.py 的文件。接着在该文件中查找继承 unittest.TestCase 的类,最后查找该类中名称以 test 开头的方法,作为测试用例来执行。为了发现不是以 test 开头的测试方法,乃至更灵活地匹配,本文定义了一个继承 unittest.TestLoader 的子类。代码impo

2020-08-29 16:11:09 432

原创 用 Python 的 difflib 模拟 GNU diff 的输出

文章目录代码效果演示项目中需要在不同操作系统上使用 GNU diff 命令,因此用 Python 自带的 difflib 库模拟它的输出格式。代码import difflibimport redef diff(file1, file2, encoding='utf-8'): """ Simulates the output of GNU diff. You can use `diff(f1, f2)` to simulate `diff -w f1 f2` ""

2020-08-29 14:04:38 230

原创 统计 Prometheus 的告警次数

本文忽略 pending 状态的警报,只统计 firing 状态的。1统计当前的告警数:count(ALERTS{alertstate="firing"}) by(alertname)2先添加一条规则,提取firing状态的警报的起始时刻:groups:- name: recording_rules rules: - record: ALERTS_FOR_STATE:firing expr: ALERTS_FOR_STATE and ignoring(alertstate)

2020-08-26 11:31:14 3677 5

原创 分析 Alertmanager 发送告警消息的逻辑

文章目录Alertmanager 的一般工作流程如何控制发送 resolved 消息?发送频率?特殊情况本文使用 Prometheus v2.18.1 ,Alertmanager v0.20.0本文主要分析 Alertmanager 什么情况下会发送消息,避免对用户造成消息轰炸。Alertmanager 的一般工作流程Prometheus 每隔 interval 时长执行一次 alert rule 。如果执行结果包含 n 个时间序列,则认为存在 n 个警报,通过 HTTP 通信发送 alertin

2020-08-18 15:20:50 4031 1

原创 主动显示 Django Admin 的日志表 django_admin_log

Django admin 本身会对用户在 admin 页面上作出的所有修改操作记录日志,存储在数据库的 django_admin_log 表里。如下:但是在 admin 页面中并没有显示日志表。为了主动显示该日志表,笔者在 admin.py 中加入了如下类:from django.contrib import [email protected](admin.models.LogEntry)class LogEntryAdmin(ImportExportModelAdmin):

2020-07-31 17:49:25 4562 4

原创 Jenkins没有更新slave上的shell环境变量

明明配置了JAVA_HOME,Jenkins却找不到java命令的执行路径。调试之后发现,原因是:当修改了 slave 节点上的 shell 环境变量之后,Jenkins执行Job时并不会更新环境变量。粗暴的解决方法是:让 Job 主动执行`source /etc/profile`来加载环境变量,但这需要经常修改Job,碍事。多次调试,发现:- 当 Jenkins master 通过 SSH 连接到 slave 之后(以 notty 方式连接,不创建终端),会执行 java -jar remoti

2020-06-02 11:33:34 1641 1

原创 Jenkins自动备份Job配置、主目录的方案

笔者计划采用以下方案备份 Jenkins 的数据:安装“Job Configuration History”插件,用于记录各个 Job 以及系统配置的变更历史,可以随时回滚配置。(使用效果类似 Git 的版本管理,好评)另外,定期对 Jenkins 的主目录做一次备份。关于备份主目录,虽然 Jenkins 有两个用于备份的插件,但笔者试用之后还是放弃了:Backup :必须手动操作。...

2020-04-23 16:48:19 1208

原创 用 jenkinsapi 抓取 Jenkins 的构建历史

写个Python脚本,抓取Jenkins所有Job的构建历史,保存为一个 xlsx 表格,以便统计。"""用法:填写登录Jenkins的URL、账号、密码pip install jenkinsapi openpyxlpython fetch_jenkins_build_history.py"""import jenkinsapiimport openpyxldef get_b...

2020-04-10 17:38:55 3485

原创 用Python实现中文的正则替换、调用元素组

笔者需要批量修改一些文件中的汉字,因此调研正则替换的工具,试用后发现:VS Code可以正则替换、调用元素组、处理中文字符,如下:但是它批量处理多个文件时是基于另一个正则引擎,不能处理中文字符。Notepad++与之类似,但是处理多个文件时还需要手动打开,比较麻烦。sed命令可以正则替换、调用元素组、批量处理多个文件,但是不能处理中文字符。如下:[root@Centos ~]# ech...

2020-01-19 11:55:07 1379

原创 用饭店比喻计算机的结构

前段时间给别人科普计算机的结构时,想到了一个饭店的比喻,自觉不错,因此在本文整理一下:计算机的特点饭店的比喻计算机中的文件、程序等东西,统称为“数据”饭店中的水果、饭菜等东西,统称为“食物”计算机的组成要素有很多,本文主要分析其中的CPU、内存、外存饭店的组成要素有很多,本文主要分析其中的厨师、厨房、冷库CPU最重要,负责运行计算机程序厨师最重要,负责为饭店...

2019-12-29 18:59:00 388 1

原创 使用GitHubRunner

文章目录简介添加Runner简介GitHub提供了Actions功能,以实现CI/CD。官方文档Actions是类似Jenkins的流水线,用YAML的语法描述,保存为 .github/workflows/xx.yml 文件。Actions默认运行在GitHub提供的运行环境中(包括Linux、Windows、MacOS),用户也可以添加自己的运行环境,称为Runner。作为R...

2019-11-24 20:34:50 2607

原创 Python各版本的差异总结

文章目录Python2与Python3Python2系列Python3系列Python3.4Python3.5Python3.6Python3.7Python3.8Python的版本主要分为 2.× 、 3.× 两个系列。- Python3计划每年发布一个新的子版本,一次只增加一两种新语法。- 使用时当然选择越新的Python版本越好,版本越老的代码越难维护。- 维护老版本的代码时,需要了解各版本之间的主要差异。有时看到一些代码的语法特点,可以大致猜出它是什么版本。

2019-11-16 19:19:07 53423 14

原创 Linux常见网络测试的总结

文章目录查看本机IP地址、MAC地址查看端口信息、占用端口的进程判断网络是否连通、网络延迟判断TCP端口是否连通判断能否连接到Web网站其它测试查看本机IP地址、MAC地址方法:执行ifconfig或者ip addr例:[root@Centos ~]# ifconfigeth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu ...

2019-11-16 01:05:01 2071

原创 Python字符串编码格式的总结

编码格式chardet模块数据交换格式str与bytes字符串常量编码格式以下编码格式是基于某种字符集,规定了每个字符存储时的二进制值是什么。ASCII码:最基本的字符集,总共有128个字符,用一个字节存储一个字符。比如字母’A’存储时的二进制值是0100 0001。Unicode(统一码、万国码):给多国语言的字符规定了唯一编号(但并没有规定它们存储时采用什么二进制值)。...

2019-10-30 20:36:16 2571

原创 C语言指针地址与数字、字符串的转换

原理将各种类型的指针地址转换成unsigned long数字之后,就可以方便地在不同函数之间传递,绕过函数形参的类型检查。在32位CPU上,long与指针变量都是占4字节;在64位CPU上,long与指针变量都是占8字节。因此,使用unsigned long类型保存指针地址可以兼容32位CPU和64位CPU。将指针地址转换成字符串形式之后,就可以方便地在不同进程之间传递,或者保存到文本中...

2019-10-26 12:49:33 9800 1

原创 基于PyQt5,做一个批量移动/拷贝文件的软件

基于PyQt5,做一个批量移动/拷贝文件的软件。预览图使用规则移动(或拷贝)A目录及其子目录下的所有X文件,到B目录。X是不包含路径的文件名,可以使用通配符或正则表达式进行匹配。如果有多个相同名字的文件被移动(或拷贝)到B目录,则后来的文件会把先来的文件覆盖。使用技巧在磁盘中,移动文件比拷贝文件的速度更快。运行时产生的信息和错误都会打印到日志窗口。下载发布版...

2019-10-15 01:12:47 980

原创 使用xadmin2,自定义Action和message

xadmin:Python的第三方库,用作Django的插件,提供了更美观的admin页面。使用时基本不必修改Django项目的原本代码,主要是针对admin.py做出改动。用法安装:pip install xadmin2在settings.py的INSTALLED_APPS[]中加入’xadmin’和’crispy_forms’。如下: ```python INSTALLED...

2019-10-09 17:40:25 936

原创 Python使用OAuthLib库进行第三方登录

OAuthLibOAuth:一个用于授权的API标准。可以实现常见的第三方登录。常用的版本是OAuth2,它不兼容OAuth1。OAuth的目的是:用户想通过平台A的账号直接登录第三方应用,第三方应用想得到用户的token,从而有权限访问用户在平台A上的某些资源(比如用户名、邮箱)。笔者认为,OAuth的主要难点是怎么构造请求参数、哪些参数是必要的。就算勉强实现OAuth了,也不怎么规...

2019-09-27 23:54:13 4102

原创 C语言用pthread.h创建线程

C语言的线程库pthread.h的APIpthread.h的示例C语言的线程库在Linux系统上,可使用pthread.h创建线程。比如pthread_create()。pthread.h符合POSIX标准,适用于类Unix、Linux系统。也有兼容Windows的版本——pthreads-w32。编译时要链接pthread库,比如:gcc test.c -o test -l pt...

2019-09-01 23:41:36 8376

原创 Nginx配置中没有server_name会怎样?

Nginx配置中没有server_name会怎样?答案:相当于填了server_name “”;,不会匹配任何域名。此时Nginx会将HTTP请求交给监听该端口的默认server处理。Nginx选用server的规则配置文件nginx.conf中,http{}中可以定义多个server{},表示HTTP服务器。每个server{}中可以定义多个location{},表示该网站的URL路由...

2019-08-30 19:19:22 18862 10

原创 用Docker部署Django+uWSGI+Nginx

部署Django+uWSGI+Nginx+Docker选择一台主机登入创建centos容器安装Python解释器安装Django项目的依赖库尝试运行Django测试服务器运行uWSGI服务器运行Nginx服务器制作Docker镜像部署Django+uWSGI+Nginx+Docker在生产环境中部署Django项目时,有挺多麻烦,本文分成多个步骤:选择一台主机登入安装Python解释器...

2019-08-13 11:15:48 4560 7

原创 Python两行代码生成随机密码

>>> import os, base64>>> base64.b64encode(os.urandom(12))b'gA8Ecm1DZkiyJ0V3'原理:用 os.urandom() 随机生成 n 个字节,再通过base64转码得到 n*4/3 个字节。结果每个字符的取值范围为:26个大写字母、26个小写字母、10个数字、2个特殊字符 + / ...

2019-07-22 15:31:15 271

原创 将Python的嵌套字典变成一维,以便urlencode

Python urlencode()处理嵌套字典出错Python的urllib.parse提供了urlencode()方法,可以直接将字典转换成URL字符串。但是使用时发现它只能处理一维字典,转换嵌套字典时就会出错。如下:from urllib import parsepayload = {"status": 200, "body": {"id": 1, ...

2019-07-19 18:48:51 1745 4

原创 Python用pyexiv2读写图片元数据(EXIF、IPTC、XMP)

图片元数据是什么?如何编辑?图片元数据是什么?图片元数据(metadata)是嵌入到图片文件中的一些标签。比较像文件属性,但是种类繁多。常见的几种标准有:EXIF:通常被数码相机在拍摄照片时自动添加,比如相机型号、镜头、曝光、图片尺寸等信息。IPTC:比如图片标题、关键字、说明、作者、版权等信息。XMP:由Adobe公司制定标准,以XML格式保存。用PhotoShop等Adobe公司...

2019-07-08 20:23:32 13106 28

原创 解决 pip3.4 install mysqlclient 报错

尝试在一个centos容器中使用python3.4、pip3.4,安装mysqlclient,反复遇到报错:刚开始,执行pip3.4 install mysqlclient时报错:OSError: mysql_config not found----------------------------------------Command "python setup.py egg_info...

2019-06-24 15:08:19 1939

原创 测试验证Dockerfile的ENTRYPOINT和CMD命令的效果

验证ENTRYPOINT和CMD命令的用法 验证ENTRYPOINT和CMD命令的用法是否必须要写?可以写几个?shell格式与exec格式有什么区别?ENTRYPOINT与CMD命令之间怎么相互影响?对于Dockerfile的ENTRYPOINT和CMD命令,网上有很多教程,但是有些众口不一,这里验证几个问题。是否必须要写?编写一个Dockerfile,内容为:FROM cento...

2019-06-17 17:24:50 1989

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除