扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
zbxTable是一个开源zabbix报表系统,go语言编写(张思德,zabbix中国社区开源专家),目前版本已更新到1.15版本,支持zabbix5.4版本。
目前成都创新互联已为成百上千的企业提供了网站建设、域名、虚拟空间、成都网站托管、企业网站设计、龙湾网站维护等服务,公司将坚持客户导向、应用为本的策略,正道将秉承"和谐、参与、激情"的文化,与客户和合作伙伴齐心协力一起成长,共同发展。
zbxTable部署有两种方式:RPM部署和编译安装,如有特殊需要,可选择编译安装,zbxtable用go语言编写,对系统影响小,推荐用RPM安装。
添加yum源
CentOS 6.x
rpm -Uvh
CentOS 7.X
rpm -Uvh
CentOS 8.X
rpm -Uvh
安装
全新安装直接复制命令即可
yum clean all
yum -y install zbxtable
安装ms-agent
yum -y install ms-agent
配置
数据库初始化
mysql -uroot -ppassword
create database zbxtable character set utf8 collate utf8_bin;
create user zbxtable@localhost identified by ‘zbxtablepwd123’;
这里不讲其他数据库,有兴趣的可以看官网具体配置
系统初始化
配置文件需要初始化才能生成,步骤如下:
cd /usr/local/zbxtable/
./zbxtable init
这时候会进入交互命令行,根据实际情况正确输入数据库库的账号密码,zabbix链接信息,成功后会生成配置文件,否则无法看到配置文件。
配置MS-Agent
MS-Agent作为告警消息采集客户端,采集zabbix产生的告警信息,发送到zbxtable平台中,zbxtable需要在zabbix server配置相应的action。配置如下。
cd /usr/local/zbxtable
./zbxtable install
这时会在zabbix上创建ms-agent用户,密码随机,权限管理员,最后输出MS-Agent token为MS-Agent 与ZbxTable通信的token,需要和MS-Agent 配置文件里的token保持一致,否则无法正常收到告警。 Token可在conf/app.conf文件里找到。
启动服务
systemctl enable --now zbxtable
重启
systemctl restart zbxtable
查看状态
systemctl status zbxtable
必须确保zbxtable服务是active状态,如果异常,查看日志文件:/usr/local/zbxtable/logs/zbxtable.log或者系统日志message
Zbxtable-web配置
zbxtable使用nginx做代理,安装即可
yum -y install nginx
拷贝nginx配置文件
cp /usr/local/zbxtable/nginx.conf /etc/nginx/conf.d/
启动nginx
systemctl start nginx
开机自启动
systemctl enable nginx
zbxtable访问地址:,默认账号密码:admin/Zbxtable。
概要
由于gRPC主要是谷歌开发的,由于一些已知的原因,gRPC跑demo还是不那么顺利的。单独写这一篇,主要是gRPC安装过程中的坑太多了,记录下来让大家少走弯路。
主要的坑:
本文讲解gRPC demo的同时,会介绍如何解决这些坑。本文对应的Github地址: 。该仓库存储了demo示例,以及部分系统编译好的二进制包,大家觉得有些步骤里耗时实在太长了,可以直接clone该仓库,复制二进制包到对应目录(仅限测试开发,生产环境还是老老实实自己编译吧)。
升级GCC
gRPC命令行工具编译需要使用 GCC4.8及以上版本。CentOS6系列的内置版本是GCC4.7。
如果你的系统GCC版本=4.8,可以忽略本节。如果仅使用golang、java,请忽略本节。
如果需要升级gcc至4.8或更高版本,建议直接采用安装SCL源之后安装devtoolset-6(devtoolset-6目前gcc版本为6.3),因为devtoolset-4及之前的版本都已经结束支持,只能通过其他方法安装。
升级到gcc 6.3:
需要注意的是scl命令启用只是 临时 的,退出shell或重启就会恢复原系统gcc版本。如果要长期使用gcc 6.3的话:
这样退出shell重新打开就是新版的gcc了。其它版本同理。
升级到gcc 7.3:
已经停止支持的devtoolset4(gcc 5.2)及之前版本的安装方法,可能比较慢,大家感兴趣的话可以尝试。
编译gRPC命令行工具
gRPC分C、JAVA、GO、NodeJS版本,C版本包括C++, Python, Ruby, Objective-C, PHP, C#,这些语言都是基于C版本开发的,共用代码库一个代码库。
如果使用C版本的gRPC,最终要从源码里编译出下列工具:
这些工具作为插件供proto编译器使用。需要先下载 grpc/grpc github上的源码。
这里有2个坑:
1、grpc/grpc仓库比较大,鉴于国内访问的网速,建议使用国内镜像。码云()提供了同步更新的镜像地址:
这样下载速度提高了不少。
2、git submodule update这个命令实际就是在下载.gitmodules文件里定义的第三方依赖项到third_party目录,这个依赖项有很多,大家可以打开.gitmodules文件查看下详情。依赖的仓库都在github上,下载没几个小时是下载不下来的,就等着慢慢下载吧。
回头想想,我们花费了很多时间,结果只是为了得到grpc的proto编译插件。
PHP相关支持
PHP暂时不支持作为grpc的服务端。作为客户端是可以的,需要机器安装:
其中protoc和protobuf c扩展已经在 Protobuf 小试牛刀 介绍过了,这里不再赘述。上一小节里如果安装成功,那么grpc_php_plugin也是有了的。下面介绍如何安装PHP版的gRPC库。
安装grpc c扩展:
要求:GCC编译器需要4.8及以上版本。可以使用pecl安装:
也可以指定版本:
或者下载源码()安装:
grpc/grpc代码库里也有PHP扩展的C源码,在grpc/src/php/ext/grpc目录,进去也可以直接编译。
编译完成后在php.ini里添加,使用php --ri grpc可以查看信息。
安装完C扩展后,还需要使用composer安装grpc的库:
gRPC示例
编写gRPC proto
一共定义了三个文件:
其中 User 作为 Model定义,Response 用于 RPC统一返回定义,GreeterService 则是服务接口定义。
限于篇幅,proto文件详见 仓库的proto目录。
GreeterService.proto文件内容如下:
这里面定义了一个service,相当于定义了一个服务接口,我们把方法名、参数定义好了,后面需要去实现它。由于gRPC不支持PHP作为服务端,这里我们使用Golang作为服务端。
首先需要使用proto工具编译出golang的代码:
执行成功,会在 Pb_Go目录里生成Go代码:
如果需要生成PHP客户端的代码,则需要使用grpc php的命令行工具grpc_php_plugin,前面小结如果执行成功,这个工具已经有了。然后:
最终生成的文件:
注意:编译那里如果我们不加--grpc_out=../$out --plugin=protoc-gen-grpc=/usr/local/bin/grpc_php_plugin,生成的PHP类是没有GreeterClient的。这个文件是gRPC编译工具自动生成的,用于连接gRPC服务端。
go编写服务
我们用Golang写服务端。上面虽然生成了Golang的部分代码,但真正的服务还没有写呢。
main.go
首先我们新建个main.go,代码不多,我直接贴出来:
然后就可以编译了。
有个大坑:go build main.go的时候会先下载go.mod里定义的依赖(依赖比较多,详情查看:),其中下面这条非常慢,仓库太大了,虽然重定向到github:
为了快速下载,我在码云上做了镜像,地址:gitee.com/52fhy/google-api-go-client 。改了之后下载快多了。
编译成功后,生成了二进制文件main。我们可以直接运行:
go test
为了测试我们写的服务是否正常,可以写测试用例:
test_client.go
运行:
运行有点慢,感觉依赖的库多了。
php客户端
使用gRPC PHP客户端,确保你已经安装了:
示例:
client_test.php
运行后输出:
常见问题
1、CentOS6使用 go mod获取第三方依赖包unknown revision xxx错误
解决:其实go mod调用链中会用到一些git指令,当git版本比较旧时,调用失败产生错误,并给出歧义的提示信息。方法就是升级git版本,CentOS6自带的git是1.7版本。升级完毕后,再尝试go mod。
快速升级方法:
centos6:
2、PHP报错:Fatal error: Class 'Google\Protobuf\Internal\Message' not found
解决:请安装PHP的protobuf c扩展。
3、PHP报错:Fatal error: Class '\Grpc\BaseStub' not found
解决:使用composer require grpc/grpc安装grpc。另外对应的grpc C扩展也要安装。
4、下载 github release包很慢怎么办?
解决:下载Mac版 Free Download Manager 下载工具可以解决Github 下载缓慢或失败问题。速度嗖嗖的。
参考
1、为CentOS 6、7升级gcc至4.8、4.9、5.2、6.3、7.3等高版本
2、centos 6.x/7.x使用yum升级git版本 - 夜空
3、Protobuf 小试牛刀 - 飞鸿影
(本文完)
Go 语言又称为 golang, 是由 Google 最初开发的一种开源编程语言,其在设计时就遵循了简单、安全和速度的 3 大原则。Go 语言具有多种调试、测试、分析和代码审查工具,如今 Go 语言和工具已在大多数 Linux 发行版本的源库中进行提供,本文我就来说明如何为 Linux 安装 Go 语言。
Ubuntu、Debian或Linux Mint安装Go语言
基于 Debian的 Linux 发行版本都可以使用 apt-get 命令来进行安装:
sudo apt-get install golang
要查看当前系统安装的 Go 语言版本可以使用如下命令:
go version
由于 Go 代码必需保存在 workspace(工作区)中,所以我们必需在 Home 目录(例如 ~/workspace)创建一个workspace 目录并定义 GOPATH 环境变量指向该目录,这个目录将被 Go 工具用于保存和编辑二进制文件。
mkdir ~/workspace
echo 'export GOPATH="$HOME/workspace"' ~/.bashrc
source ~/.bashrc
根据不同的需要,我们可以使用 apt-get 安装 Go tools:
sudo apt-cache search golang
Fedora、CentOS或RHEL安装Go语言
基于 Red Hat 的 Linux 发行版本都可以使用 yum 命令来进行安装:
sudo yum install golang
要查看当前系统安装的 Go 语言版本可以使用如下命令:
go version
接下来还是在 Home 目录(例如 ~/workspace)创建一个 workspace 目录并定义 GOPATH 环境变量指向该目录,这个目录将被 Go 工具用于保存和编辑二进制文件。
mkdir ~/workspace
echo 'export GOPATH="$HOME/workspace"' ~/.bashrc
source ~/.bashrc
根据不同的需要,我们可以使用 yum 安装 Go tools:
yum search golang
为Linux手动安装Go语言
由于大家使用的 Linux 源不尽相同,也不见得是最新版本或需要版本的 Go 语言包,所以我们说一下如何手动安装指定版本。
下载 Go 语言文件
64-bit Linux
wget
32-bit Linux
wget
下载地址:
解压二进制文件到 /usr/local 目录
sudo tar -xzf go1.4.2.linux-xxx.tar.gz -C /usr/local
使用 vi 在环境变量配置文件 /etc/profile 中增加如下内容:
export PATH=$PATH:/usr/local/go/bin
检查 Go 语言版本
go version
定义 GOPATH 环境变量到 workspace 目录
export GOPATH="$HOME/workspace
Golang也就是Go语言,现在已经发行到1.4.1版本了,语言特性优越性和背后Google强大靠山什么的就不多说了。Golang的官方提供了多个平台上的二进制安装包,遗憾的是并非没有发布ARM平台的二进制安装包。ARM平台没办法直接从官网下载二进制安装包来安装,好在Golang是支持多平台并且开源的语言,因此可以通过直接在ARM平台上编译源代码来安装。整个过程主要包括编译工具配置、获取Golang源代码、设置Golang编译环境变量、编译、配置Golang行环境变量等步骤。
注:本文选用树莓派做测试,因为树莓派是基于ARM平台的。
1、编译工具配置
据说下个版本的golang编译工具要使用golang自己来写,但目前还是使用C编译工具的。因此,首先要配置好C编译工具:
1.1 在Ubuntu或Debian平台上可以使用sudo apt-get install gcc libc6-dev命令安装,树莓派的RaspBian系统是基于Debian修改的,所以可以使用这种方法安装。
1.2 在RedHat或CentOS 6平台上可以使用sudo yum install gcc libc-devel命令安装。
安装完成后可以输入 gcc --version命令验证是否成功安装。
2、获取golang源代码
2.1 直接从官网下载源代码压缩包。
golang官网提供golang的源代码压缩包,可以直接下载,最新的1.4.1版本源代码链接:
2.2 使用git工具获取。
golang使用git版本管理工具,也可以使用git获取golang源代码。推荐使用这个方法,因为以后可以随时获取最新的golang源代码。
2.2.1 首先确认ARM平台上已经安装了git工具,可以使用git --version命令确认。一般linux平台都安装了git,没有的话可以自行安装,不同平台的安装方法可以参考:
2.2.2 克隆远程golang的git仓库到本地
在终端cd到你想要安装golang的目录,确保该目录下没有名为go的目录。然后以下命令获取代码仓库:
git clone
大陆地区可能会获取失败,在不翻墙的情况下我试了几次都没成功,原因大家都懂的。好在google已经将golang也托管到github上面,所以也可以通过下面命令获取:
git clone
视网络情况,下载可能需要不少时间。我2M的带宽花了将近两个小时才下载完,虽然整个项目不过几十兆= =
下载完成后,可以看到目录下多了一个go目录,里面即为golang的源代码,在终端上执行cd go命令进入该目录。
执行下面命令检出go1.4.1版本的源代码,因为现在已经有新的代码提交上去了,最新的代码可能不是最稳定的:
git checkout go1.4.1
至此,最新1.4.1发行版的源代码获取完毕
3、设置golang的编译环境变量
主要有GOROOT、GOOS、GOARCH、GOARM四个环境变量需要设置,先解释四个环境变量的意义。
3.1 GOROOT
主要代表golang树结构目录的路径,也就是上面git检出的go目录。一般可以不用设置这个环境变量,因为编译的时候默认会以go目录下src子目录中的all.bash脚本运行时的父目录作为GOROOT的值。为了保险起见,可以直接设置为go目录的路径。
3.2 GOOS和GOARCH
分别代表编译的目标系统和平台,可选值如下:
GOOS GOARCH
darwin 386
darwin amd64
dragonfly 386
dragonfly amd64
freebsd 386
freebsd amd64
freebsd arm
linux 386
linux amd64
linux arm
netbsd 386
netbsd amd64
netbsd arm
openbsd 386
openbsd amd64
plan9 386
plan9 amd64
solaris amd64
windows 386
windows amd64
需要注意的是这两个值代表的是目标系统和平台,而不是编译源代码的系统和平台。树莓派的RaspBian是linux系统,所以这些GOOS设置为linux,GOARCH设置为arm。
3.3 GOARM
表示使用的浮点运算协处理器版本号,只对arm平台有用,可选值有5,6,7。如果是在目标平台上编译源代码,这个值可以不设置,它会自动判断需要使用哪一个版本。
总结下来,在树莓派上设置golang的编译环境变量,可编辑$HOME/.bashrc文件,在末尾添加下面内容:
export GOROOT=你的go目录路径
export GOOS=linux
export GOARCH=arm
编辑完后保存,执行source ~/.bashrc命令让修改生效。
4、编译源代码
环境变量配置完成自后就可以开始编译源代码。在go目录下的src子目录中,主要有all.bash和make.bash两个脚本(另外还有两个all.bat和make.bat脚本适用于window平台)。编译实际上就是执行其中一个脚本,两者的区别在于all.bash在编译完成后还会执行一些测试套件。如果希望只编译不测试,可以运行make.bash脚本。使用cd命令进入go下src目录,执行./all.bash或者./make.bash命令即可开始编译。由于硬件情况不同,编译耗费的时间不同。在我的B型树莓派编译过程花费了将近半个小时,编译完成后执行的测试套件又花费了差不多一个小时,总共花费了一个半小时左右。
5、配置golang运行环境变量
编译完成后,go目录下会生成bin目录,里面就是go的运行脚本。为了以后使用方法,可以将这个bin路径添加到PATH环境变量中。同样编辑~/.bashrc文件,因为前面设置过GOROOT环境变量指向go目录了,所以只需要在末尾加上
export PATH=$PATH:$GOROOT/bin
保存后同样执行source ~/.bashrc命令让环境变量生效。
至此,golang源代码编译安装成功。执行go version应该就能看到当前golang的版本信息,表示编译安装成功。
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流