景&環境:
操作系統: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小時內與您取得聯系。