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变量解决

 示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
     环境变量文件
     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服务配置共同处理具体处理如下

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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  ~


日志分开写后效果

1
2
3
4
5
6
7
8
9
10
11
[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



本文转自 qwjhq 51CTO博客,原文链接:http://blog.51cto.com/bingdian/1981701

相关实践学习
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
【涂鸦即艺术】基于云应用开发平台CAP部署AI实时生图绘板
相关文章
|
7月前
|
Java 测试技术 API
【JUC】(1)带你重新认识进程与线程!!让你深层次了解线程运行的睡眠与打断!!
JUC是什么?你可以说它就是研究Java方面的并发过程。本篇是JUC专栏的第一章!带你了解并行与并发、线程与程序、线程的启动与休眠、打断和等待!全是干货!快快快!
1118 2
|
存储 缓存 监控
【YashanDB数据库】数据库运行正常,日志出现大量错误metadata changed
数据库运行正常,日志出现大量错误metadata changed
|
Linux Python
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
829 2
|
PHP Docker 容器
如何在宿主主机运行容器中的php守护进程
在Docker容器中同时运行多个程序(如Nginx+PHP+Ftp)时,需用`docker exec`命令启动额外服务。首先通过`php -v`查看PHP版本,再用`which php-fpm7.4`确认PHP安装路径,通常返回`/usr/sbin/php-fpm7.4`。最后直接运行该路径启动PHP-FPM服务,确保其正常工作。
398 14
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
3314 2
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
649 5
|
存储 SQL 关系型数据库
【赵渝强老师】PostgreSQL的运行日志文件
PostgreSQL的物理存储结构包括数据文件、日志文件等。运行日志默认未开启,需配置`postgresql.conf`文件中的相关参数如`log_destination`、`log_directory`等,以记录数据库状态、错误信息等。示例配置中启用了CSV格式日志,便于管理和分析。通过创建表操作,可查看生成的日志文件,了解具体日志内容。
553 3
|
Arthas 监控 Java
JVM知识体系学习七:了解JVM常用命令行参数、GC日志详解、调优三大方面(JVM规划和预调优、优化JVM环境、JVM运行出现的各种问题)、Arthas
这篇文章全面介绍了JVM的命令行参数、GC日志分析以及性能调优的各个方面,包括监控工具使用和实际案例分析。
1770 3
|
Linux Shell
6-9|linux查询现在运行的进程
6-9|linux查询现在运行的进程
|
数据采集 监控 API
如何监控一个程序的运行情况,然后视情况将进程杀死并重启
这篇文章介绍了如何使用Python的psutil和subprocess库监控程序运行情况,并在程序异常时自动重启,包括多进程通信和使用日志文件进行断点重续的方法。