harbor進程組件化運行及systemd 進程日誌分寫
目標
由於公司容器化上生產後,需要規範發布流程,而作為容器的基礎服務harbor鏡像倉庫,通過自己來發布自己不太理,於是將鏡像方式的harbor組件變更為進程方式發布。由於已經上線較長時間,各系統的配置諸如環境變量、配置文件、日誌告警相關的一堆流程已配置過。改代碼編譯問題好辦,如何讓原來的環境變量、配置文件、日誌文件等均不變化是目前需要解決的問題
環境
centos 7.2
1、harbor jobserivce ui為一套代碼共用base config服務對於兩服務的配置項CONFIG_PATH指向的配置文件不同,主要涉及分離端口監聽問題
CONFIG_PATH=/apps/conf/harbor/jobservice/app.conf
CONFIG_PATH=/apps/conf/harbor/ui/app.conf
/apps/conf/harbor/jobservice/app.conf
httpport = 8080
/apps/conf/harbor/ui/app.conf
httpport = 8088
解決
環境變量問題可以通過systemd的EnvironmentFile變量解決
示例
環境變量文件 cat /apps/conf/harbor/jobservice/env HARBOR_DB_HOST=‘192.168.1.23‘ HARBOR_DB_PORT=3306 HARBOR_DB_USER=‘root‘ HARBOR_DB_PASSWORD=‘1xxxv‘ CONFIG_PATH=/apps/conf/harbor/jobservice/app.conf systemd配置文件引用環境變量文件 cat /usr/lib/systemd/system/harbor-jobservice.service [Service] EnvironmentFile=/apps/conf/harbor/jobservice/env ExecStart=/apps/svr/harbor/jobservice 啟動該服務時相當於為該進程執行過一次export,不影響其他系統服務 export VIP_HARBOR_DB_HOST=‘192.168.1.23‘ export VIP_HARBOR_DB_PORT=3306 export VIP_HARBOR_DB_USER=‘root‘ export VIP_HARBOR_DB_PASSWORD=‘1xxxv‘ export CONFIG_PATH=/apps/conf/harbor/jobservice/app.conf
2、日誌問題,進程由systemd接管後,日誌寫入到/var/log/messages裏,現要將jobservice registry ui三個組件的日誌分開寫,每個日誌的監控級別不同,registry日誌裏的error關鍵字並一定是錯誤,不分開寫會錯誤日誌報警問題
解決
該問題可以結合systemd與rsyslog服務配置共同處理具體處理如下
示例
jobservice配置 cat /usr/lib/systemd/system/harbor-jobservice.service [Unit] Description=Harbor Jobservice After=network.target [Service] EnvironmentFile=/apps/conf/harbor/jobservice/env ExecStart=/apps/svr/harbor/jobservice ExecReload=/bin/kill -HUP $MAINPID KillMode=process StandardOutput=syslog #日誌采用syslog StandardError=syslog #日誌采用syslog SyslogIdentifier=jobservice #日誌標簽 [Install] WantedBy=multi-user.target ui配置 cat /usr/lib/systemd/system/harbor-ui.service [Unit] Description=Harbor UI After=network.target [Service] EnvironmentFile=/apps/conf/harbor/ui/env ExecStart=/apps/svr/harbor/ui ExecReload=/bin/kill -HUP $MAINPID KillMode=process StandardOutput=syslog #日誌采用syslog StandardError=syslog #日誌采用syslog SyslogIdentifier=ui #日誌標簽 [Install] WantedBy=multi-user.target registry配置 cat /usr/lib/systemd/system/registry.service [Unit] Description=Harbor Registry After=network.target [Service] ExecStart=/apps/svr/harbor/registry serve /apps/conf/harbor/registry/config.yml ExecReload=/bin/kill -HUP $MAINPID KillMode=process StandardOutput=syslog #日誌采用syslog StandardError=syslog #日誌采用syslog SyslogIdentifier=registry #日誌標簽 [Install] WantedBy=multi-user.target rsyslog配置 新增配置文件 /etc/rsyslog.d/harbor.conf if $programname == ‘jobservice‘ then /apps/logs/harbor/jobservice/jobservice.test.com.log if $programname == ‘jobservice‘ then ~ if $programname == ‘ui‘ then /apps/logs/harbor/ui/ui.test.com.log if $programname == ‘ui‘ then ~ if $programname == ‘registry‘ then /apps/logs/harbor/registry/registry.test.com.log if $programname == ‘registry‘ then ~
日誌分開寫後效果
[root@harborB ~]# tail -f /var/log/messages Nov 14 15:21:10 harborB systemd: Stopping Harbor Registry... Nov 14 15:21:10 harborB systemd: Started Harbor Registry. Nov 14 15:21:10 harborB systemd: Starting Harbor Registry... [root@harborB ~]# tailf /apps/logs/harbor/registry/registry.test.com.log Nov 14 15:21:10 harborB registry: time="2017-11-14T15:21:10.679673744+08:00" level=info msg="redis not configured" go.version=go1.8.3 instance.id=ece5a83c-6359-476e-8358-49bbb33ed441 service=registry version="v2.6.0+unknown" Nov 14 15:21:10 harborB registry: time="2017-11-14T15:21:10.699754153+08:00" level=info msg="using inmemory blob descriptor cache" go.version=go1.8.3 instance.id=ece5a83c-6359-476e-8358-49bbb33ed441 service=registry version="v2.6.0+unknown" Nov 14 15:21:10 harborB registry: time="2017-11-14T15:21:10.699862266+08:00" level=info msg="listening on [::]:5000" go.version=go1.8.3 instance.id=ece5a83c-6359-476e-8358-49bbb33ed441 service=registry version="v2.6.0+unknown"
systemd日誌寫入參考:https://stackoverflow.com/questions/37585758/how-to-redirect-output-of-systemd-service-to-a-file
harbor進程組件化運行及systemd 進程日誌分寫