最近CI MR一直有问题,检查了一下postgres和runner的日志,发现一些错误,

1、postgres反复打印这个:
2022-07-08 20:08:36.615 UTC [21332] LOG: unexpected EOF on client connection with an open transaction
2022-07-08 20:08:36.618 UTC [21331] LOG: could not receive data from client: Connection reset by peer
2022-07-08 20:08:36.619 UTC [21330] LOG: could not receive data from client: Connection reset by peer
2022-07-08 20:08:36.619 UTC [21330] LOG: unexpected EOF on client connection with an open transaction
2022-07-08 20:08:36.625 UTC [21355] LOG: could not receive data from client: Connection reset by peer
2022-07-08 20:08:36.625 UTC [21355] LOG: unexpected EOF on client connection with an open transaction
2022-07-08 20:34:22.059 UTC [24769] LOG: could not receive data from client: Connection reset by peer
2、ci-runner报这种错误:
WARNING: Checking for jobs… failed runner=gnsdmtyh status=couldn’t execute POST against http://gitlab.test.com/api/v4/jobs/request: Post “http://gitlab.test.com/api/v4/jobs/request”: net/http: timeout awaiting response headers

WARNING: Checking for jobs… failed runner=cj5usep3 status=POST http://gitlab.test.com/api/v4/jobs/request: 503 Service Unavailable (failure to get a peer from the ring-balancer)

ci-runner里还有一些这个错误:
WARNING: Submitting job to coordinator… job failed code=403 job=9616 job-status=canceled runner=c8hkmxyP update-interval=0s
WARNING: Failed to process runner builds=3 error=canceled executor=kubernetes runner=c8hkmxyP

看起来像是你的runner无法访问到gitlab server,你可以重启一下runner,看看最新的日志能否正常访问到gitlab server,如果依然报连接错误,你可能需要排查一下runner到gitlab server这段的网络问题了。

==============》runner目前看不出网络问题。
另外,postgres那个错误正常吗?

这个日志只是说连接postgresql的客户端主动断开了连接,这个你需要排查一下具体是哪里的客户端,如果是健康检查之类的,就不影响。

但是我的日志里面只有这个错误,是不是有问题?

runner的这个日志错误确实是有问题,会导致不能正常调用runner。
但是postgresql这个日志应该是不会影响功能的使用的。

runner的日志看起来像是网络问题!

我们经常MR合入的时候会卡住,显示check status.有时候MR train没有反应。是不是也跟这个有关。

实际现象其实是有以下几个:
1、Merge后一直处理,checking pipeline status状态,也需要反复重试MR才能成功;
2、start merge train一直没有反应,就是点击完后合并不成功,又回到原来的状态(又需要继续点击merge train),需要反复重试,经过很长时间,最后又能合入。----这个问题可以看什么日志吗?
3、一直处于create 状态,没有任何下一步动作,重试有时候就可以了。—这里可以看什么日志吗?
总结下,就是我们推测可能是一个任务的pipline状态可能有问题,导致的。但这个具体可以看什么日志吗?或者这个状态是保存在哪里的?数据库吗?

去查看了gitlab-access.log日志里,一个正处于create状态一直无反应的pipeline id,发现下面很多这种:
GET /api/graphql?query=query%20getPipelineHeaderData(%24fullPath%3A%20ID!%2C%20%24iid%3A%20ID!)%20%7B%20project(fullPath%3A%20%24fullPath)%20%7B%20id%20pipeline(iid%3A%20%24iid)%20%7B%20id%20iid%20status%20retryable%20cancelable%20userPermissions%20%7B%20destroyPipeline%20updatePipeline%20__typename%20%7D%20detailedStatus%20%7B%20id%20detailsPath%20icon%20group%20text%20__typename%20%7D%20createdAt%20user%20%7B%20id%20name%20username%20webPath%20webUrl%20email%20avatarUrl%20status%20%7B%20message%20emoji%20__typename%20%7D%20__typename%20%7D%20__typename%20%7D%20__typename%20%7D%20%7D&operationName=getPipelineHeaderData&variables=%7B%22fullPath%22%3A%22autonomy%2Fslam%2Fmif%22%2C%22iid%22%3A%22360%22%7D HTTP/1.1" 304 0 "http://gitlab-ee.xxx.com/aaa/bbb/ccc/-/pipelines/5708

我的runner配置里:
url:
clone_url都改为内部域名了。
为什么我的Kubectl logs runner的日志时候,打印还是域名?
Checking for jobs… received job=12110 repo_url=http://gitlab-ee.xx/group/repo.git runner=XYWp7S5h

这个域名是由gitlab 的externalurl下发的吧。。。

CI的错误这个有没有什么影响:
WARNING: Job failed: command terminated with exit code 1
duration_s=408.178906718 job=12176 project=100 runner=xqkupLeA
WARNING: Failed to process runner builds=4 error=command terminated with exit code 1 executor=kubernetes runner=xqkupLeA
WARNING: Job failed: command terminated with exit code 1
duration_s=423.64188114 job=12175 project=100 runner=xqkupLeA
WARNING: Failed to process runner builds=3 error=command terminated with exit code 1 executor=kubernetes runner=xqkupLeA
Job succeeded duration_s=838.954709482 job=12172 project=100 runner=xqkupLeA
WARNING: Job failed: command terminated with exit code 1
duration_s=449.861612439 job=12174 project=100 runner=xqkupLeA
WARNING: Failed to process runner builds=1 error=command terminated with exit code 1 executor=kubernetes runner=xqkupLeA

稍等一下哈,我看你这边问题有点多,我先研究一下,再回答你哈。

其实我这核心现象是这个:
1、Merge后一直处理,checking pipeline status状态,也需要反复重试MR才能成功;
2、start merge train一直没有反应,就是点击完后合并不成功,又回到原来的状态(又需要继续点击merge train),需要反复重试,经过很长时间,最后又能合入。----这个问题可以看什么日志吗?
3、一直处于create 状态,没有任何下一步动作,重试有时候就可以了。—这里可以看什么日志吗?
总结下,就是我们推测可能是一个任务的pipline状态可能有问题,导致的。但这个具体可以看什么日志吗?或者这个状态是保存在哪里的?数据库吗?
===》因为上面这些问题,所以才引发我去看runner日志,看postgre日志,推测网络可能有一定的问题,又去修改runner和gitlab实例的交互。但是并不知道当前这个问题是否可能是其他原因导致的。上面的现象还可以通过排查哪些日志来找到问题的根源?

你好:
1.一直卡在checking pipeline status,表示获取不到pipline的状态,你需要看看你的pipeline是否配置了merge request相关的关键字,也有可能是因为你这个实例与runner交互有问题,所以pipeline一直没有执行成功导致的。

2.“start merge train一直没有反应”,看你的描述应该是你点了过一会儿它又变成了start merge train是吧?这个可能还是你stage中没有指定merge request相关的关键字造成的,你的gitlab-ci.yml中有配置类似:

  rules:
    - if: $CI_PIPELINE_SOURCE == "merge_request_event"

这样的字段吗?
其实你在点击start merge train之后在ui上就会展示出相应的信息,告诉你为什么start merge train失败,有点类似于下面这张图片:


另外,你可以在/var/log/gitlab/gitlab-rails/production_json.log找到相关日志。

3.一直处于create状态我没太理解到是什么处于create状态,是merge之后一直create不出pipeline吗?
你可以参考一下这个 Troubleshooting

1、我们gitlab-ci.yaml, pipeline里是这样配置的:
only:
- merge_requests
2、我们start merge train没有任何的错误提示,跟你的图片显示不一样,就是好像点击了跟没有点击一样。/var/log/gitlab/gitlab-rails/production_json.log里看了下主要是接口的日志,这块根据什么排查?
3、一直处于create状态我没太理解到是什么处于create状态,===》就是pipeline页面显示的一直create 但是没有实际的job出来。

感觉你这几个问题可能根源都还在runner上面,像是runner没有响应造成的。你们只有一个runner吗?可以尝试临时注册一个其它的runner,看看效果会不会有改变呢?

我们好几个runner呢。不止一个,都出现过类似问题。

你好,根据你的描述看起来还是像runner的问题。
感觉你的问题可以总结为:创建pipeline有问题。
无论是你merge时卡在checking pipeline status还是merge train不成功,都是pipeline没跑成功造成的。