git tag 是给当前仓库设置一个快照,常用于设置版本号, 你有必须知道一下.
查看 git tag # 查看当前项目的tag git show v1.0.0 # 查看某 tag 的详情 创建 git tag v1.0.0 # 给当前项目版本打上 v1.0.0 版本号 # 给指定的提交版本号打上 tag git log --pretty=oneline --abbrev-commit # 查看所有短ID 312bda6 (HEAD -> master) # 给日志 312bda6 打上 tag git tag v1.0.3 312bda6 # 给标签写上注释 git tag -a v1.2.0 -m "tag notes" 提交 git push origin v1.0.0 # 将 v1.0.0 推送到远程 git push --tags # 推送本地的所有的 Tag 删除 git tag -d v1.在做 go 开发, 如果是使用 go1.11 版本, 相信大家都会使用到 go mod 做为依赖管理, 因为 go mod 可以设置代理,国外的包,轻松下载. 但是在某一天你使用公司自建的 gitlab ,需要引用 gitlab 上面的依赖包,就需要做一些设置才会正常 go mod tidy,否则会出现无法引用的问题. 本文介绍一下如何操作.
适用于 window, linux 环境, 本人没 macOSX
你将学到:
如何设置 go mod 代理 如何设置 go env GOPRIVATE 变量 如何在代码里引用自建的 gitlab 依赖代码 设置 go mod 代理 linux, window 设置
go env -w GO111MODULE=on go env -w GOPROXY=https://goproxy.io,direct 实践 假定私有 gitlab 仓库地址为: http://mygit.sgfoot.com/ (注意只支持http, 不支持https)
创建一个 gitlab 依赖代码 仓库地址HTTP: http://mygit.sgfoot.com/common.git 仓库地址SSH: git@mygit.脚本工具 名称 安装/下载 备注 检查 shell 工具 yum -y install ShellCheck 下载 能检查sh语法仅适用 CentOS 7
mysqld_export 安装 prometheus 监听 mysql 服务
一键安装
curl -sSL http://s1.sgfoot.com/sh/mysql_exporter.sh | sudo bash 验证 # 验证进程是否启动 netstat -nplt |grep mysqld_exporter # 验证是否可以获取 metrics curl http://localhost:9104/metrics 配置nginx安全访问 如果涉及到外网访问则需要配置密码访问
参考:nginx 添加权限验证
htpasswd -bc /etc/nginx/htpasswd.users sgfoot sgfoot.pass # sgfoot 是帐号名 # sgfoot.pass 是密码 nginx 的vhost配置 mysqld_exporter.conf
server { listen 80; server_name mysqld_exporter.io; location / { auth_basic "Prometheus"; auth_basic_user_file /etc/nginx/htpasswd.users;# 验证文件 proxy_pass http://127.0.0.1:9104; } } 添加 prometheus 节点 配置 host你将会学到
一个完整的gRPC流实例,包括单向流与双向流的操作 如何实现gRPC流服务端代码 如何实现gRPC流客户端代码 准备 新建一个文件夹 go-grpc-simple-stream 在go-grpc-simple文件夹下建立三个目录: client, proto,server 使用 go mod 管理代码 在 go-grpc-simple-stream 目录下执行 go mod init go-grpc-simple-stream 编写 proto 文件 在 go-grpc-simple-stream/proto 目录下新建 hello.proto 文件
syntax = "proto3"; package hello; service HelloService { // 定义一个服务端推送客户的单向流 rpc ServerToClient(StreamRequest) returns (stream StreamResponse){}; // 定义一个客户端推送服务端的单向流 rpc ClientToServer(stream StreamRequest) returns (StreamResponse){}; // 定义一个服务端与客户端的双向流 rpc AllStream(stream StreamRequest) returns (stream StreamResponse){}; } // stream 请求结构 message StreamRequest { string data = 1; } // stream 响应结构 message StreamResponse { string data = 1; } 生成 pb go 代码 在 go-grpc-simple-stream/proto 目录下新建 gen.你将会学到
一个完整的gRPC实例 如何实现gRPC服务端代码 如何实现gRPC客户端代码 准备 新建一个文件夹 go-grpc-simple 在go-grpc-simple文件夹下建立三个目录: client, proto,server 使用 go mod 管理代码 在 go-grpc-simple 目录下执行 go mod init grpc-simple 编写 proto 文件 在 go-grpc-simple/proto 目录下新建 hello.proto 文件
// 选择 proto3 语法 syntax = "proto3"; // 定义一个包名 package hello; // 定义一个 service 服务,相当于 GO 接口定义 service HelloService { // 以 rpc 开头,定义未实现的方法名称。 必须要有一个请求 message 和响应 message // rpc, returns 都是关键字 rpc Hello(StringRequest) returns (StringResponse){}; } // message 相当于一个结构体,里面定义字段属性, 先类型后变量名,然后序列号。 // protoful 编码是通过成员的唯一编号来绑定对应的数据。 // 定义一个请求结构体 message StringRequest { string value = 1; } // 定义一个响应结构体 message StringResponse { string result = 1; } 生成 pb go 代码 在 go-grpc-simple/proto 目录下新建 gen.Protobuf 是 Protobuf Buffers 的简称,它是 Google 公司开发的一种数据描述语言,并于2008年开源。
可用作为设计安全的跨语言 RPC 接口的基础工具。
目前 Protobuf 已经发展到第3版本,即 syntax = "proto3"; 你将会学到
如何编写 protobuf 文件 如何通过protoc工具生成 go 代码 编写 protobuf 文件 先定义语法版本 再定义package 定义一个 service 定义一组 request,response 的 message 创建 hello.proto 文件
第一行结尾需要写上分号; service 相当于定义接口, rpc 定义未实现的接口方法 message 相当于定义一个结构体,里面定义字段属性, 先类型后变量名,然后序列号。 每一行数据类型后需要写一个编号,从1开始,因为编码是通过成员的唯一编号来绑定对应的数据。 推荐使用请求message后加上Request关键字, 如StringRequest 推荐使用响应message后加上Response关键字,如StringResponse // 选择 proto3 语法 syntax = "proto3"; // 定义一个包名为 hello package hello; // 定义一个 service 服务名为 HelloService,相当于 GO 接口定义 service HelloService { // 以 rpc 开头,定义未实现的方法名称。 必须要有一个请求 message 和响应 message // rpc, returns 都是关键字 rpc Hello(StringRequest) returns (StringResponse){}; } // message 相当于一个结构体,里面定义字段属性, 先类型后变量名,然后序列号。 // protoful 编码是通过成员的唯一编号来绑定对应的数据。 // 定义一个请求结构体 message StringRequest { string value = 1; } // 定义一个响应结构体 message StringResponse { string result = 1; } 标量类型 以下只列出常用的类型对应关系。更多参考最下面的链接什么是gRPC RPC 是远程过程调用 (Remote Procedure Call)的缩写。在 RPC 中,客户端应用程序可以直接调用不同机器上的服务器应用程序上的方法,就像它是本地对象一样,使您可以更轻松地创建分布式应用程序和服务。
gRPC 是 Google 开源的基于 Protobuf 和 Http2.0 协议的通信框架,底层由netty提供。
是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。
特点 基于HTTP/2协议实现,实现多路复用,双向流等特点。 基于 Protobuf 协议,支持多种语言。 参考 gRPC 官方文档中文版
推荐学习 gRPC入门 简介 gRPC入门 Protobuf gRPC入门 搭建完整gRPC gRPC入门 实现双向流拒绝某度盘,支持蓝凑盘, 欢迎留言,提供资源。只提供最优质的资源。
序列 书名 备注 1 高性能MySQL(第3版) 带目录 2 设计模式之禅 带目录,第1版本排查问题 使用top 再按大写M, 对内存采用降序显示,一目了然看到谁占用内存最高。
定位到rsyslogd进程占用内存25.7%,非常可怕,需要急需解决掉它。
什么是rsyslog: 系统提供的多线性日志系统,参考: https://www.rsyslog.com/
解决问题 rsyslogd是它的守护进程,可以通过systemctl status rsyslog 查看运行状态
红色显示错误信息。
使用journalctl --verify 检查系统日志卷文件损坏情况
如果检查出来有红色的文件,则直接删除即可。
删除/var/lib/rsyslog/imjournal.state 文件
重启rsyslogd进程, systemctl restart rsyslog
然后使用 top 查看,内存占用率是否没有啦。
避免再次发生 修改/etc/rsyslog.conf 文件
最后行添加2行代码
$imjournalRatelimitInterval 0 $imjournalRatelimitBurst 0 重启服务:systemctl restart rsyslog
关闭 journal 压缩配置
vim /etc/systemd/journald.conf # 找到 #Compress=yes 修改成 no Compress=no # 重启服务 systemctl restart systemd-journald