harbor进程组件化运行及systemd 进程日志分写

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介:

目标

     由于公司容器化上生产后,需要规范发布流程,而作为容器的基础服务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

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
相关文章
|
7天前
|
监控 搜索推荐 开发工具
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
2025年1月9日更新Windows操作系统个人使用-禁用掉一下一些不必要的服务-关闭占用资源的进程-禁用服务提升系统运行速度-让电脑不再卡顿-优雅草央千澈-长期更新
|
5月前
|
Linux Python
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
linux上根据运行程序的进程号,查看程序所在的绝对路径。linux查看进程启动的时间
86 2
|
1月前
|
存储 SQL 关系型数据库
【赵渝强老师】PostgreSQL的运行日志文件
PostgreSQL的物理存储结构包括数据文件、日志文件等。运行日志默认未开启,需配置`postgresql.conf`文件中的相关参数如`log_destination`、`log_directory`等,以记录数据库状态、错误信息等。示例配置中启用了CSV格式日志,便于管理和分析。通过创建表操作,可查看生成的日志文件,了解具体日志内容。
|
1月前
|
存储 Prometheus 监控
Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行
本文深入探讨了在Docker容器内进行应用调试与故障排除的方法与技巧,包括使用日志、进入容器检查、利用监控工具及检查配置等,旨在帮助用户有效应对应用部署中的挑战,确保应用稳定运行。
61 5
|
3月前
|
Arthas 监控 Java
JVM知识体系学习七:了解JVM常用命令行参数、GC日志详解、调优三大方面(JVM规划和预调优、优化JVM环境、JVM运行出现的各种问题)、Arthas
这篇文章全面介绍了JVM的命令行参数、GC日志分析以及性能调优的各个方面,包括监控工具使用和实际案例分析。
110 3
|
4月前
|
Linux Shell
6-9|linux查询现在运行的进程
6-9|linux查询现在运行的进程
|
3月前
|
NoSQL Linux 程序员
进程管理与运行分析
进程管理与运行分析
30 0
|
5月前
|
数据采集 监控 API
如何监控一个程序的运行情况,然后视情况将进程杀死并重启
这篇文章介绍了如何使用Python的psutil和subprocess库监控程序运行情况,并在程序异常时自动重启,包括多进程通信和使用日志文件进行断点重续的方法。
|
5月前
|
消息中间件 JSON 自然语言处理
Python多进程日志以及分布式日志的实现方式
python日志模块logging支持多线程,但是在多进程下写入日志文件容易出现下面的问题: PermissionError: [WinError 32] 另一个程序正在使用此文件,进程无法访问。 也就是日志文件被占用的情况,原因是多个进程的文件handler对日志文件进行操作产生的。
|
5月前
|
数据库 Java 监控
Struts 2 日志管理化身神秘魔法师,洞察应用运行乾坤,演绎奇幻篇章!
【8月更文挑战第31天】在软件开发中,了解应用运行状况至关重要。日志管理作为 Struts 2 应用的关键组件,记录着每个动作和决策,如同监控摄像头,帮助我们迅速定位问题、分析性能和使用情况,为优化提供依据。Struts 2 支持多种日志框架(如 Log4j、Logback),便于配置日志级别、格式和输出位置。通过在 Action 类中添加日志记录,我们能在开发过程中获取详细信息,及时发现并解决问题。合理配置日志不仅有助于调试,还能分析用户行为,提升应用性能和稳定性。
70 0