1. 程式人生 > >harbor進程組件化運行及systemd 進程日誌分寫

harbor進程組件化運行及systemd 進程日誌分寫

systemd環境變量 systemd rsyslog

目標

由於公司容器化上生產後,需要規範發布流程,而作為容器的基礎服務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 進程日誌分寫