






摘 要:申威作為純自主指令架構處理器,已經應用于民用市場。文中主要研究Zabbix系統在國產自主架構申威服務器的編譯移植問題以及部分功能的模擬應用來簡單說明利用開源軟件解決申威服務器編譯移植問題的思路,并實現功能測試,以驗證適配移植思路是否正確,從而證明國產服務器已經能夠滿足民用市場需求,為更多申威或其他國產架構服務器移植問題提供解決思路。
關鍵詞:申威架構;Zabbix;編譯安裝;模擬應用;移植;服務器
中圖分類號:TP314 文獻標識碼:A 文章編號:2095-1302(2024)08-0-04
DOI:10.16667/j.issn.2095-1302.2024.08.032
0 引 言
Zabbix作為一個基于Web界面的提供分布式系統監視功能的企業級開源解決方案已經被廣泛應用于系統運營監控領域,但主要使用于x86架構和ARM架構服務器上。
作為純國產自主指令集架構的申威服務器目前也被廣泛應用于民用市場[1]。作為民用產品服務器,需要更為完備的生態系統,因此國產申威服務器更需要實現開源軟件的編譯移植,適配后的軟件應用試驗及相應功能測試[2]。文中提供了Zabbix在國產申威服務器上的軟件編譯移植以及部分功能的模擬應用[3],希望能為申威生態適配工作提供幫助[4],促進申威生態系統的完善。
1 編譯安裝
1.1 準備工作
從Zabbix官方網站下載源碼包[5]zabbix-4.0.18.tar.gz,將源碼包拷貝至待安裝Zabbix服務的申威服務器中,拷貝至
/opt目錄下。
解壓zabbix-4.0.18.tar.gz:
#tar -xvf zabbix-4.0.18.tar.gz
替換config.guess和config.sub[6],代碼如下:
# cp /usr/share/automake-1.16/config.sub /opt/subversion-1.14.2/build/config.sub
#cp /usr/share/automake-1.16/config.guess /opt/subversion-1.14.2/build/config.guess
1.2 編譯安裝
執行預編譯,指定安裝路徑為:/usr/local/zabbix,同時編譯zabbix_server和zabbix_agentd兩個模塊,其中預編譯指令如下:
#./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with--ssh2
(1)MySQL數據庫依賴異常
MySQL數據庫依賴異常報錯如圖1所示。
缺少數據庫依賴,編譯安裝MySQL(MySQL5.7.40)。將MySQL安裝在該目錄下:/usr/local/mysql,完成MySQL編譯安裝后執行指令:
#./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql=/usr/local/mysql/bin/mysql_config --enable-ipv6 --with-net-snmp --with-libcurl --with--ssh2
(2)net-snmp異常
net-snmp依賴報錯如圖2所示。
缺少net-snmp依賴,編譯安裝net-snmp(net-snmp-5.9.3)[6],
將net-snmp安裝在該目錄下:/usr/local/net-snmp,完成net-snmp編譯安裝后執行指令:
#./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql=/usr/local/mysql/bin/mysql_config --enable-ipv6 --with-net-snmp=/usr/local/net-snmp/bin/net-snmp-config --with-libcurl --with--ssh2
(3)libevent缺少
缺少依賴libevent,進行依賴安裝:#apt-get install libevent-devel,安裝完成后繼續執行預編譯:
#./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql=/usr/local/mysql/bin/mysql_config --enable-ipv6 --with-net-snmp=/usr/local/net-snmp/bin/net-snmp-config --with-libcurl --with--ssh2
(4)curl異常
curl依賴報錯如圖3所示。
缺少curl依賴,編譯安裝curl[7](curl-7.30.0),并將curl安裝在該目錄下:/usr/local/curl,安裝完成后繼續執行預編譯:
#./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql=/usr/local/mysql/bin/mysql_config --enable-ipv6 --with-net-snmp=/usr/local/net-snmp/bin/net-snmp-config --with-libcurl=/usr/local/curl/bin/curl-config --with--ssh2
(5)編譯安裝
預編譯成功界面如圖4所示。
預編譯完成后執行編譯安裝程序:
#make amp; make insall
至此,服務Zabbix的編譯安裝完成。
1.3 Web服務配置部署
(1)添加Zabbix系統賬號
添加Zabbix系統賬號的命令如下所示:
#groupadd zabbix
#useradd -g zabbix -m zabbix
#chown -R root.zabbix /usr/local/zabbix
(2)數據庫配置
修改zabbix_server.conf配置文件中的配置項目,文中只修改關于數據庫連接的配置,具體如下:
#vi /usr/local/zabbix/etc/zabbix_server.conf
DBName=zabbix
DBUser=zabbixer
DBPassword=123456
(3)Web部署配置
Zabbix網頁服務部署可以采用Nginx和Apache兩種方式,文中采用Apache部署方式進行該Web服務的部署:
#cp -r zabbix-4.0.18/frontends/php/* /var/www/zabbix/
#chown -R zabbix.zabbix /var/www/zabbix/
修改Apache的配置文件(統信系統修改apache2.conf,麒麟系統修改httpd.conf):
#vi /etc/apache2/apache2.conf//統信系統
#vi /etc/httpd/conf/httpd/conf//麒麟系統
lt;Directory /var/www/zabbix/gt;
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
lt;/Directorygt;
#vi /etc/apache2/sites-enabled/000-default.conf
DocumentRoot /var/www/zabbix
重啟Apache服務:#service apache2 restart
完成部署后,我們通過瀏覽器訪問http://192.168.17.171/index.php,文中采用內網部署方式,通過部署機器的內網ip便可訪問Zabbix服務的安裝指導頁面,按照流程進行操作安裝。
(4)安裝過程中的異常解決方案[8]
異常1解決方案:
PHP option \"post_max_size\" 8M 16M Fail
修改php.ini文件:
#vi /etc/php/7.3/apache2/php.ini
post_max_size = 16M
異常2解決方案:
PHP option \"max_execution_time\" 30 300 Fail
#vi /etc/php/7.3/apache2/php.ini
max_execution_time = 300
異常3解決方案:
PHP option \"max_input_time\" 60 300 Fail
#vi /etc/php/7.3/apache2/php.ini
max_input_time = 300
異常4解決方案:
PHP option \"date.timezone\" unknown Fail
#vi /etc/php/7.3/apache2/php.ini
date.timezone = Asia/Shanghai
異常5解決方案:
PHP databases support of Fail
#apt-get install php-mysql
異常6解決方案:
PHP bcmath of Fail
#apt-get install php-bcmath
異常7解決方案:
PHP mbstring of Fail
#apt-get install php-mbstring
異常8解決方案:
PHP gd unknown Fail
PHP gd PNG support of Fail
PHP gd JPEG support of Fail
PHP gd FreeType support of Fail
#apt-get install php-gd
異常9解決方案:
PHP xmlwriter of Fail
PHP xmlreader of Fail
#apt-get install php-xml
(5)初始化數據庫
創建數據庫Zabbix:CREATE DATABASE zabbix CHARACTER SET utf8 COLLATE utf8_bin;
依次執行數據庫腳本(目錄:zabbix-4.0.18\database\mysql): schema, images, data。
(6)啟動zabbix_server服務
zabbix_server啟動過程中可能會遇到找不到依賴的問題,文中系統遇到異常問題后會通過查找對應依賴包并創建軟連接的方式解決,具體如圖5所示。
2 應 用
Zabbix作為一個IT運維的綜合應用解決方案可以監控較多軟件運行,而文中主要針對Nginx服務和MySQL數據庫的訪問進行監控。文中模擬了實際運行環境,監控Nginx服務器和MySQL數據庫。
2.1 Nginx監控應用
(1)Nginx安裝注意事項
安裝Nginx時需要注意,必須安裝http_stub_status_module模塊,其他模塊根據業務需求自行決定是否安裝。安裝代碼如下:
#./configure --prefix=/usr/local/nginx --with-http_stub_status_module
(2)狀態監聽配置
在Server模塊中增加一個命令:
location /status {
stub_status on;
}
(3)安裝并配置zabbix-agentd
監聽終端只需安裝zabbix-agentd即可,相對于安裝服務端更容易,無需數據庫等依賴環境。具體操作如下:
#./configure --prefix=/usr/local/zabbix --enable-agentd
#make amp; make install
安裝完zabbix-agentd后,需要配置上報數據的服務地址,修改配置文件zabbix_agentd.conf,具體修改內容如下:
Server=192.168.17.187
ServerActive=192.168.17.187
Timeout=15
Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
配置Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/的目的是為導入后續配置監聽腳本文件,文中配置監聽Nginx狀態的腳本存放在該目錄下。
(4)配置Nginx監聽
此處主要配置監控key文件和Nginx監聽可執行腳本文件地址:
#vi /usr/local/zabbix/etc/zabbix_agentd.conf.d/nginx.status
UserParameter=nginx.status[*],/usr/bin/nginx_check_status.sh $1
在目錄/usr/bin下創建nginx_check_status.sh文件并賦予可執行權限:#chmod +x /usr/bin/nginx_check_status.sh,然后編輯該腳本,具體內容如下(Nginx默認端口為80,文中采用10008端口):
#!/bin/bash
case $1 in
active)
curl -s http://127.0.0.1:10008/status | awk '/Active/{print $NF}';;
waiting)
curl -s http://127.0.0.1:10008/status | awk '/Waiting/{print $NF}';;
accepts)
curl -s http://127.0.0.1:10008/status | awk 'NR==3{print $2}';;
esac
(5)Zabbix主機監控項配置
首先創建監控主機:Configuration--gt;Hosts,添加被監控主機信息,創建主機名為“Web1”,后續關于Nginx監聽項目的配置都在該主機下進行,文中主要配置監控項items,增加監控服務中關于訪問請求的監控項[9]。
(6)監控測試
通過任意主機項Nginx服務發送數據請求,然后查看Zabbix對Nginx訪問請求的監控,其中,文中采用主機向服務器發送10 000次請求,通過指令模擬器向Nginx服務器發送并發數據,指令如:#ab -c 100 -n 10000 http://192.168.17.187:10008/。
模擬端執行模擬訪問請求后,查看Zabbix對Nginx的訪問監控,其結果如圖6所示。
2.2 MySQL監控應用
(1)配置MySQL監聽
此處主要配置Zabbix監控數據庫的配置文件(check_mysql.conf)和數據庫可執行文件(check_mysql.sh),以MySQL的查詢監控統計為例進行配置說明。其配置操作如下:
#vi/usr/local/zabbix/etc/zabbix_agentd.conf.d/mysql.status
UnsafeUserParameters=1
UserParameter=mysql.version,mysql -V
UserParameter=mysql.status[*],/etc/zabbix/check_mysql.sh $1
UserParameter=mysql.ping,netstat -ntpl |grep 3306 |grep mysql |wc |awk '{print $1}'
#vi /usr/bin/check_mysql.sh
腳本內容如下:
#!/bin/sh
MYSQL_SOCK=\"/var/lib/mysql/mysql.sock\"
MYSQL_USER='zabbix'
MYSQL_PWD='被監控數據庫密碼'
MYSQL_HOST='被監控數據庫ip'
MYSQL_PORT='3306'
ARGS=1
case $1 in
Com_select)
result=`/usr/bin/mysqladmin -u$MYSQL_USER -h$MYSQL_HOST -p${MYSQL_PWD} -P${MYSQL_PORT} -S $MYSQL_SOCK extended-status 2gt;/dev/1 |grep -w \"Com_select\"|cut -d\"|\" -f3`
echo $result;;
esac
修改該腳本為可執行文件:#chmod +x /usr/bin/check_mysql.sh。
(2)監控測試
文中通過Apache JMeter測試工具分別執行插入數據、修改數據、查詢數據和刪除數據操作各100萬次,最終MySQL數據監測界面如圖7所示。頁面反饋數據存在差異,是由于其中2條修改記錄為手動操作產生,而查詢記錄多出
1 004條是由于JMeter在進行插入、修改和刪除操作時系統反饋查詢所產生。由此可見,Zabbix在申威服務器應用監控MySQL數據功能中可以實現完全監測,滿足了應用需求。
3 結 語
綜上所述,Zabbix在申威服務器完成編譯移植工作過程中可能會遇到一些問題,主要以無法識別宿主服務器CPU架構居多,需要移植工作者針對出現的問題進行分析并解決,而文中已經完成了Zabbix的安裝部署以及部分功能的測試,過程結合了PHP、Apache、Nginx以及MySQL數據庫的綜合應用。申威架構服務器可以滿足民用市場的需求[10],但其仍存在諸多不足,需努力改進,以促進申威生態更好的
發展。
參考文獻
[1]施光源.基于國產申威處理器的自主可控產品實踐之路[J].網絡安全空間,2018,19(9):78-81.
[2]柴赟達.面向國產申威平臺的編譯訪存優化技術研究[D].鄭州:鄭州大學,2022.
[3]吳雅雙,張淳,卓皓.基于Zabbix的校園監控系統[J].現代信息技術,2022,44(6):18-20.
[4]鮑正剛,王興元,王豐. Java項目在申威平臺上的移植部署[J].網絡安全技術與應用,2023,23(4):64-66.
[5]鄭鵬飛.基于Zabbix的智慧運維在空管信息系統中的應用[J].中國新通信,2022,24(22):13-14.
[6]姚文軍,陳俊仕,蘇志超,等.基于神威太湖之光的NAMD軟件的移植與優化[J].計算機工程與科學,2017,45(6):1022-1030.
[7]范黎林,喬一航,李俊飛,等.基于國產C86處理器的CP2K軟件移植與優化[J].計算機科學,2023,50(6):58-65.
[8]郭彬,吳學離,周浩潔.使用ARM64架構主機搭建Zabbix運維監視運行環境[J].電腦知識與技術,2020,27(3):242-245.
[9]張朝暉,陳兆軍,邱艷.基于Docker環境下Zabbix架構運維告警平臺的建設及應用[J].醫療裝備,2023,37(9):19-21.
[10]明旭,何慧文,陳磊. DPDK在國產申威處理器平臺上的應用與研究[J].信息安全研究,2018,4(1):53-62.
收稿日期:2023-09-19 修回日期:2023-10-27
作者簡介:王 豐(1987—),男,研究方向為申威架構軟件移植。
任 雪(1984—),男,研究方向為申威架構軟件移植。