自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

B.I.T

Better In Time

  • 博客(115)
  • 收藏
  • 关注

翻译 prometheus的remote write功能

处理逻辑prometheus配置了remote write的目标地址后,它会从WAL读取数据,然后把采样数据写入各分片的内存队列,最后发起向远程目标地址的请求。数据流的逻辑大致如下: |--> queue (shard_1) --> remote endpointWAL --|--> queue (shard_...) --> remote endpoint |--> queue (shard_n) --> remote end

2020-08-30 17:37:54 10809

原创 prometheus远程写之thanos receive模块

背景起初(大概2020上半年之前)此模块还在试验阶段,现在此功能模块已经被社区正式接受,功能会相对稳定了,因此,考虑使用receiver模块。目标通过使用receiver模块,期望做到:收拢分散的prometheus采集数据,减少sidecar数量(如果thanos query后面挂过多sidecar会影响性能)尽可能减少采集prometheus实例本地存储数据量,使重启、故障恢复时间更短架构介绍架构图 +Tenant's Premise | Prov

2020-08-30 01:41:57 2573 6

原创 K8S Pod该如何监控

背景由于业务容器化的推进,对K8S上运行的业务,也必须做到向之前物理机/虚拟机上一样,要有完备的监控保障。但是,毕竟K8S不是物理机/虚拟机,由于技术实现方式不同,监控方面也是有一定差别的。Pod是K8S上调度的最小单元,本文就K8S Pod该如何监控进行说明。CPU在使用物理机/虚拟机时,对于CPU的监控通常关注的是CPU使用率、CPU负载等。在K8S场景下,关注的指标有所不同:CPU使用率、CPU受限(CPU Throttled)时间或占比等。CPU使用率K8S场景下,CPU使用率是相对CP

2020-06-17 00:37:32 8507 5

原创 Prometheus中label名不一致的常用解决方案

在Prometheus的时候,有时候出于某种目的,经常会有要重命名label的需要。比如,老K8S集群上标识pod名的label叫pod_name,新K8S集群上的pod名label叫pod, 这种不一致会造成一些不必要的麻烦。为了保障label取值的统一,这里介绍两种常用的方法。采集时处理使用metric_relabel_configs来实现。下面这段配置会添加一个名为pod_name的label,其值为pod的值:metric_relabel_configs:- source_labels: [

2020-06-16 23:52:04 3613

原创 ingress nginx传递用户真实ip问题

业务应用经常有需要用到用户真实ip的场景,比如:异地登录的风险预警、访问用户分布统计等功能等。当有这种需求的时候,在业务上容器过程中,如果用到ingress就要注意配置了。通常,用户ip的传递依靠的是X-Forwarded-*参数。但是默认情况下,ingress是没有开启的。ingress的文档还比较详细,这里介绍一下可能用到的这3个参数:注:在文档顶栏的搜索框搜索forward字样就可以找到这3个参数1. use-forwarded-headers如果Nginx在其他7层代理或负载均衡后面

2020-06-08 13:41:34 6823 2

原创 Galaxy固定容器IP网路方案

背景在推动业务上容器过程中,存在业务方框架(如Java的dubbo)对ip依赖较重,但框架改造周期较长的问题。为了解决这个问题,运维侧从网络层面固定容器IP的方式着手,引入了腾讯开源的Galaxy插件。这里对此插件的安装部署进行说明。Galaxy架构概览Galaxy网络方案主要包括两个模块:galaxy:以daemonset形式存在每个k8s集群的节点上,它通过判断pod annotation信息,来设定pod网络是用固定ip还是非固定ipgalaxy-ipam:根据pod的生命周期,完成po

2020-05-31 20:00:03 1896

翻译 K8S的10个常见失败问题的原因

1. Wrong Container Image / Invalid Registry Permissions当pod状态为ErrImagePull或ImagePullBackOff时,通常是由于以下3个原因(在排查网络故障的前提下):镜像tag写错镜像不存在,或拉取的镜像仓库地址写错没有拉取镜像的权限(漏配了imagePullSecrets)2. Application Crash...

2020-04-30 23:53:34 12506

原创 Golang中的Channel

goroutine和goroutine之间通过channel通信channel的创建1 使用make创建channel创建可以用make方法,如:c := make(chan int)此外,如果make方法第二个参数多写一个数字,则表示对channel作buffer缓冲:// 表示channel中每接收3个后再给接收者c := make(chan int, 3) 2 使用var...

2020-03-31 23:34:31 237

原创 Golang基础知多少

Golang基础知多少Package包Import导入数据类型基础数据类型种类数据类型存储大小扩展数据类型变量常量常量的声明特殊常量iota运算符算术运算符关系运算符逻辑运算符按位运算符赋值运算符控制语句if条件语句switch选择语句for循环语句控制语句关键字Package包package是工程管理中依赖关系的体现:每个Go语言源代码开头,都拥有一个package声明,表示源码文件所属...

2020-01-31 23:49:11 221

原创 流量拷贝工具goreplay

相比大家比较熟知的tcpcopy之类的流量拷贝工具,goreplay更加简单易用。最近正好有项目迁移,新环境通过流量拷贝现有HTTP服务流量进行测试分析。类似这种需求,goreplay完全可以满足(目前使用的版本为0.16.1)。以下简单说下几种用到的使用场景。1 不同的–output-xxxx参数适用不同的场景1)–output-stdout抓取监听请求,并输出到终端。此功能类似tcpdu...

2018-12-30 17:49:25 1909

原创 linux上常用的文件传输方法

方法一: scp基于ssh实现。scp -P 1234 src_target [email protected]:/dest_target方法二:rsync也是基于ssh实现的。rsync -avz src_target '-e ssh -p 1234' [email protected]:/dest_target方法三:nc当ssh有访问限制的情况下,scp...

2018-11-30 09:39:04 267

原创 Windows下安装python环境扩展包

Windows下安装python开发环境,感觉相比Linux和Mac要麻烦。相关依赖包安装不成功就很痛苦。昨天找到一个叫作Unofficial Windows Binaries for Python Extension Packages的网站,上面可以找到Windows环境的python扩展包。地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/...

2018-10-24 10:10:35 639

原创 salt中的cmd.run和cmd.wait

在salt中,cmd.run和cmd.wait是很常用的两个模块函数,两着的用法也有不同。 cmd.run在每次应用state的时候都会被执行;而cmd.wait用于在某个state变化时才会执行,通常和watch一起使用如果cmd.run结合onchanges一起使用时,其效果和cmd.wait一样;参考:https://docs.saltstack.com/en/latest/...

2018-08-23 10:29:41 3868

原创 salt中的job

job的缓存salt master每次执行一个任务,都会为该任务创建一个jobid。master上默认会缓存24小时内的所有执行过的job的操作信息,其路径为/var/cache/salt/master/jobs/。minion上在每次有任务执行时,在/var/cache/salt/minion/proc/目录下会出现以jobid为名的缓存文件,可以通过strings命令查看此文件的内容;当任...

2018-08-21 19:38:03 981

原创 关于saltstack中的执行模块

1 执行模块的构成结构以python2.7环境为例,可以在/usr/lib/python2.7/site-packages/salt/modules/目录下找到salt模块的源码。比如常用的test.echo模块函数的存在形式是该目录下test.py文件中的定义的如下函数:def echo(text): ''' Return a string - used for test...

2018-07-26 00:50:54 529 2

原创 Salt远程执行命令的原理

salt-master和salt-minion属于订阅发布模式。salt-master默认会启动两个监听端口,默认是4505和4506。4506作用:Salt Master Ret接口,支持认证、文件服务、结果收集等功能;4505作用:Salt Master Pub接口,提供远程执行命令发送功能。1)salt-minion启动时从配置文件中获取master地址,如果为域名,则进行解析...

2018-07-26 00:42:01 1315

原创 关于django集成celery

定义celery实例在django项目中使用Celery,必须先定义一个Celery库的实例(常叫作app)。推荐的定义方法是,在django项目的settings.py同级目录下,创建一个celery.py文件:from __future__ import absolute_import, unicode_literalsimport osfrom celery import Cel...

2018-06-07 16:08:58 2064

原创 xargs命令

xargs命令紧跟在管道操作符之后,以标准输入作为主要的源数据流。其擅长将标准输入数据转化成命令行参数;也可以将单行或多行文本输入,转化为其他格式(如单行变多行,多行变单行)。xargs使用说明如下: 1 格式化输出 现有example.txt文件内容如下:[root@middle-server tmp]# cat example.txt a b c de f gh ij...

2018-05-31 11:05:07 1008

原创 使用awk去除重复行

先上图看一个例子: 说明:file1.txt文件中存在一些内容重复的行,通过执行awk '!a[$0]++' file1.txt看到输出结果中将重复内容的行信息过滤掉了。原理:在awk命令中,$0参数表示当前行的内容。a[$0]就是以每行内容为索引的一个数组,它的初始值为0。所以当该行内容第一次出现时,! 0=1为真,则打印该行;如果行内容重复,由于执行了++,它的值增加变为非零,非零再...

2018-04-25 10:02:18 3267 4

原创 cat命令

cat命令 通常习惯使用cat来才看一个文件的内容,其实查看man帮助中的cat命令的描述是:concatenate and print files。其中,concatenate表示拼接、串联;files用的复数,说明它并不是只能操作一个文件。1)拼接多个文件 将多个文件的内容拼接在一起,并打印出来。如:cat file1.txt file2.txt file3.txtThis ...

2018-04-19 08:23:28 3635

原创 gitlab使用备份文件进行恢复后访问报500问题

问题: gitlab使用备份文件进行恢复(可参考https://blog.csdn.net/felix_yujing/article/details/52918803 )之后,其他访问可以正常,但在访问项目repo时报500页面。查看日志: 在/var/log/gitlab/gitlab-rails/production.log目录下查看日志发现,在访问项目repo地址时,报了如下错误。 ...

2018-04-18 10:38:24 2691

原创 python中常用的内置装饰器

@property使调用类中的方法像引用类中的字段属性一样。被修饰的特性方法,内部可以实现处理逻辑,但对外提供统一的调用方式。遵循了统一访问的原则。示例:# coding: utf-8class TestClass: name = "test" def __init__(self, name): self.name = name @prop...

2018-03-29 21:54:53 10984

翻译 关于consul集群组建(bootstrapping)

consul的agent有两种运行模式:client和server server节点:负责运行一致性协议(raft协议)以及存储集群状态 client节点:可以是认为是无状态的,它依赖于server节点consul集群在提供服务之前,必须有一个server节点被选作为leader。因此,通常需要先运行server节点(这并不是严格要求的,client节点也可以在server节点前运行,但是...

2018-03-19 14:20:54 1698

原创 CentOS上安装python3

1)通过源码编译安装需要依赖gcc,zlib等包。可通过yum安装yum install gcc zlib*2)此外,pip依赖ssl环境,所以还需要先安装openssl相关的依赖yum install openssl*3)从官网下载python3源码包之后,然后解压,进入解压目录执行以下命令:./configuremakemake install编译安装完...

2018-03-13 13:38:05 237

原创 ansible的lookup插件

ansible的lookup插件可以用来从外部数据读取信息,然后付给一个变量。获取外部数据信息的种类包括:读取文件内容、随机生成password、执行shell命令、读取redis键值等等。注意,lookup的所有运算都是在ansible中控机上完成的,而不是在远程目标机上。示例:---- hosts: test_server remote_user: root tasks: ...

2018-02-27 13:20:23 1568

原创 支持配置多Jenkins Server的hubot插件

通过npm install hubot-jenkins安装的hubot-jenkins插件,只支持配置一个Jenkins Server。 在github上找到一个增强版的hubot用jenkins插件,可以支持配置多个Jenkins Server,项目地址为: https://github.com/codeandfury/hubot-jenkins-enhanced下面说一下如何配置使用:...

2018-02-08 17:35:45 1584 2

原创 hubot的插件使用

hubot是一个开源的聊天机器人框架,支持很多的插件。hubot的插件安装都是通过npm install来执行,安装完之后,通常需要在external-scripts.json里面追加新安装的插件名(有的插件不需要加,比如hubot-bearychat)。根据不同插件的需求,还需要设置相应的环境变量。目前主要用的几个插件0 hubot-slack 安装:npm install hub

2018-02-06 19:59:10 3506

原创 python多环境管理工具virtualenv

系统环境CentOS 7安装通过pip直接安装 pip install virtualenv使用示例# 在/usr/local/下面创建一个virtualenv目录,作为多环境管理用目录mkdir /usr/local/virtualenv# 进入上面创建的目录cd /usr/local/virtualenv# 创建一个名为env1的python环境(这里

2018-01-29 11:18:26 1093

原创 配置nginx显示目录文件列表

对于像ftp那样显示文件列表,nginx默认是不支持的,需要通过在location、server或http配置段添加额外参数:autoindex on; # 开启目录文件列表autoindex_exact_size on; # 显示出文件的确切大小,单位是bytesautoindex_localtime on; # 显示的文件时间为文件的服务器时间charset utf-8,gbk

2018-01-24 10:21:25 12998 1

原创 logstash的output配置中指定elasticsearch的template

之前采用的是通过filebeat收集nginx的日志,直接到elasticsearch。filebeat带有nginx的module模块,通过这个nginx模块实现filebeat对nginx日志中字段的处理。最近由于一些实际的使用场景和需求,对nginx日志的手机和处理方式做了一下调整: filebeat收集nginx原始日志信息到kafka,然后logstash再从kafka读取日志,并进行

2017-12-29 13:05:07 13638

原创 lua起步笔记

1 注释单行注释 –注释内容多行注释 –[[ 注释内容 ]]–2 标识符lua中的标识符由字母、数字、下划线组成;数字不作为开头;区分大小写。 通常,以下划线开头,后跟大写字母的名字被保留用于内部全局变量。lua中保留的关键字有:and break do elseelseif end false forfunction if in localnil not

2017-12-28 22:14:10 296

转载 系统负载能力浅析

最近看到一遍系统负载能力分析的文章,感觉写的很好,于是转到自己的博客。 原文:http://www.rowkey.me/blog/2015/09/09/load-analysis/ 一. 衡量指标用什么来衡量一个系统的负载能力呢?有一个概念叫做每秒请求数(Requests per second),指的是每秒能够成功处理请求的数目。比如说,你可以配置tomcat服务器的maxConnection为无

2017-12-15 13:00:43 751

原创 Jenkins On Kubernetes---Jenkins上Kubernetes Plugin的使用

之前写过一篇《Jenkins On Mesos—Jenkins上Mesos Plugin的使用》的博客,说的是Jenkins通过Mesos Plugin来实现slave节点的动态扩展和收缩。如果使用docker的人,不知道kubernetes的话,总是显得有些尴尬,所以最近自己也开始在测试环境使用目前火热的Kubernetes 1.8版(之前是在用Marathon+Mesos那一套)。Maratho

2017-12-06 15:46:52 16369 11

原创 关于docker中执行docker命令的实践

最近在制作给kubernetes jenkins plugin调用的jenkins slave(默认情况下,kubernetes jenkins插件使用的是jenkinsci/jnlp-slave)容器镜像,以供自动创建的pod使用。对这个镜像的需求是:希望在pod运行的容器内,执行docker命令,完成docker build, push等一些操作,即docker in docker。首先,需要在

2017-12-05 02:14:01 2466

原创 修改K8S中NodePort方式暴露服务的端口的默认范围(30000-32767)的方法

比如像把端口范围改成0-65535,则在apiserver的启动命令里面添加如下参数: –service-node-port-range=0-65535

2017-12-03 14:52:50 27180 2

原创 通过uwsgi和nginx部署django项目

django项目在服务器上的部署在linux服务器上采用uwsgi + nginx的方式部署运行。uwsgi负责django项目的python动态解析;nginx负责静态文件转发,以及uwsgi_pass到uwsgi。此外,在运行nginx之前,需要先收集Django项目的静态文件到static目录。首先,需要在settings.py文件中添加:STATIC_ROOT = os.path.join(

2017-11-30 13:27:54 552 1

原创 关于uwsgi的安装

CentOS上uwsgi的安装首先要安装依赖的python-devel: yum install python-devel其次,uwsgi的安装过程中,还需要C编译环境: yum install gcc否则回报如下错误: 最后,通过pip安装uwsgi pip install uwsgi安装成功后的信息类似如下: Mac上uwsgi的安装通过brew进行安装,安装过程中会自动安装需要的相关

2017-11-29 20:09:18 1522

原创 关于Harbor上镜像删除

参考:https://github.com/vmware/harbor/blob/master/docs/user_guide.md 关于Harbor上容器镜像的删除,有如下的介绍: 可以简单概括为:Harbor的UI界面上先删除镜像,但这个操作并没有删除磁盘上存放的镜像文件,只是镜像文件manifest的映射关系,还需要通过GC来删除。先停止Harbor:docker-compose stop通

2017-11-24 17:48:48 5936 3

原创 ansible的copy模块中content选项的使用

ansible的copy模块用来拷贝文件。通常我们将中控机上的一个已有文件,拷贝到远程服务器上。这种场景通常是中控机上要已存这个目标文件。但有时候,总会觉得这些文件放在中控机上也挺凌乱,而且这目标文件要是不小心丢了,在运行这个ansible的playbook任务的时候就会报错。能不能将这个文件的内容就写在playbook里面呢?通过copy模块的content选项是可以实现的。ansible官网上c

2017-10-24 12:57:31 6139

原创 定期删除elasticsearch集群10天以上的索引

背景 需要定期清理的索引的后缀日期格式为YYYY.MM.DD,如:project-index-2017.10.01思路 通过_cat/indices接口可以获取当前ES全部索引信息,取第三列为索引名。过滤出索引名中带有的日期字符串,然后进行日期比较,早于10天前的日期便可通过日期模糊匹配索引来删除。完整的脚本如下:#!/bin/bash##############################

2017-10-11 19:58:10 11133 5

空空如也

空空如也

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

TA关注的人

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