景&环境:
操作系统:CentOS7
Zabbix版本:6.0.1
遇到的问题:
Question One:Graph图表部分中文字符显示乱码,主要表现为方括号,具体位置在图表下方。
详见下图:
针对这个问题,主要问题点就是字符显示,Zabbix中没有合适的中文字体,我们就给他一个合适的字体即可。
解决办法:
1.在自己的个人电脑中找到字体库,本人的是WIN10系统:找到的是微软雅黑
打开C:\Windows\Fonts
搜索微软雅黑
拷贝出来到另外的文件夹,是三个文件,分别是msyh.ttc、msyhbd.ttc、msyhl.ttc
上传至zabbix服务器指定位置。我使用的Xshell的自带Xftp,不管用什么工具,能够正确上传即可
这个比较关键,网上有些是错的,Zabbix相关字体所在的真正位置是在
/var/www/html/assets/fonts
将DejaVuSans.ttf 文件进行备份 使用mv DejaVuSans.ttf DejaVuSans.ttf.bk
在linux系统中或者说在其他系统中要进行配置变更时,最好将原始配置文件进行保存,常见的就是move然后更改文件后缀名为.bk或者.backup
然后把msyhbd.ttc 改为 DejaVuSans.ttf
使用命令mv msyhbd.ttc DejaVuSans.ttf
这个时候刷新页面应该就OK了,保险起见,可以进行systemctl restart httpd
效果就是这样,中文字体就出来了。
---------------------------------------------分割线-------------------------------------------
Question Two:
时间不一致问题,就是图表上的时间和实际时间不一致,引发这个问题有几点原因:
第一,zabbix服务器的时间
第二,mysql数据库的时间
第三,PHP设置时间
服务器时区有问题
第一 使用 ntpdate 0.asia.pool.ntp.org 校准时间 首先要确保你的时区是你所想要的
但是RTC时间未变,我们要把时间同步到硬件时钟,避免下次重启改变
使用命令hwclock --systohc
这下操作系统时间都OK了,但是我的Zabbix的图表时间依然未变,查询了mysql,时区正常。(select sysdate();)
接下里就是比较重要的了,是PHP中设置的时间。
使用find命令查找linux中相关配置文件
find / -name defines.inc.php
显示两条,我的相关的路径是/var/www/html/include/defines.inc.php
使用VI编辑
vi /var/www/html/include/defines.inc.php
使用 /date.timezone 查找到时区 补上Asia/Shanghai
记得删除前面的;符号这是配置文件的注释符号
然后:wq!保存退出
然后保险起见,重启http和zabbix服务
systemctl restart httpd
systemctl restart zabbix-server
结果就一切OK
: 刚部署完zabbix后的正常状态,左下角标注的位置是中文乱码。
2:中文乱码问题
3:找到windows控制面板复制其中的字体文件,黑体为佳:simhei.ttf
4:服务器搜索zabbix的fonts目录
[root@hlying fonts]# find / -name fonts
/app/jdk1.8.0_291/jre/lib/fonts
/boot/grub2/fonts
/etc/fonts
/usr/share/fonts
/usr/share/httpd/noindex/css/fonts
/usr/share/zabbix/assets/fonts
/mnt/dvd/EFI/BOOT/fonts
/mnt/cdrom/EFI/BOOT/fonts
[root@hlying fonts]# cd /usr/share/zabbix/assets/fonts/
[root@hlying fonts]# ls
graphfont.tt
5:将本机自己选好的字体上传
[root@hlying fonts]# ls
graphfont.ttf simhei.ttf
6: 将原有的文件进行移动重命名备份,将上传的字体改为跟原有文件名一样,并重启服务
[root@hlying fonts]# mv graphfont.ttf graphfont.ttf.bak
[root@hlying fonts]# mv simhei.ttf graphfont.ttf
[root@hlying fonts]# systemctl restart zabbix-server.service
[root@hlying fonts]# ls
graphfont.ttf graphfont.ttf.bak
7: 刷新zabbix的web页面可以看到正常了
zabbix监控配置详程
zabbix邮件报警
KVM虚拟机的安装\扩容\迁移\克隆\配置
nginx
用 python2 抓取网页的时候,经常会遇到抓下来的内容显示出来是乱码。
发生这种情况的最大可能性就是编码问题: 运行环境的字符编码和网页的字符编码不一致。
比如,在 windows 的控制台(gbk)里抓取了一个 utf-8 编码的网站。或者,在 Mac / Linux 的终端(utf-8)里抓取了一个 gbk 编码的网站。因为多数网站采用 utf-8 编码,而不少人又是用 windows,所有这种情况相当常见。
如果你发现你抓下来的内容,看上去英文、数字、符号都是对的,但中间夹杂了一些乱码,那基本可以断定是此情况。
私信小编007即可获取小编精心准备的教程以及大量的PDF哦!
解决这个问题的办法就是,把结果先按网页的编码方式 decode 解码成 unicode,再输出。如果不确定网页的编码,可参照以下代码:
import urllib req = urllib.urlopen("http://some.web.site") info = req.info() charset = info.getparam('charset') content = req.read() print content.decode(charset, 'ignore') 复制代码
'ignore' 参数的作用是忽略掉无法解码的字符。
不过这种方法不总是有效。还有种方式就是通过正则直接匹配网页代码中的编码设置:
<meta http-equiv=Content-Type content="text/html;charset=utf-8"> 复制代码
除了编码问题造成乱码之外,还有种常被忽视的情况,就是 目标网页启用了 gzip 压缩 。压缩后的网页传输数据少了,打开速度更快。在浏览器中打开时,浏览器会根据网页的 header 信息自动做解压。但直接用代码抓取则不会。因此很可能就被搞糊涂了,为什么明明打开网页地址是对的,但程序抓取就不行。连我自己也曾经被这个问题坑过。
这种情况的表现是抓取的内容几乎全是乱码,甚至无法显示。
要判断网页是否启用了压缩并对其解压,可参考以下代码:
import urllib import gzip from StringIO import StringIO req = urllib.urlopen("http://some.web.site") info = req.info() encoding = info.getheader('Content-Encoding') content = req.read() if encoding == 'gzip': buf = StringIO(content) gf = gzip.GzipFile(fileobj=buf) content = gf.read() print content 复制代码
在我们教室的编程实例查天气系列(点击查看) 中,这两个问题困扰了相当多人。在此特别讲解一下。
最后,还有个“利器”要介绍一下。如果一开始就用它,你甚至不知道还有上述两个问题的存在。
这就是 requests 模块。
同样抓取网页,只需要:
import requests print requests.get("http://some.web.site").text 复制代码
没有编码问题,没有压缩问题。
This is why I love Python.
至于如何安装 requests 模块,请参考之前的文章:
如何安装 Python 的第三方模块 -
*请认真填写需求信息,我们会在24小时内与您取得联系。