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