一、使用Prometheus+Grafana实现GitLab监控与告警(主流方案)
Prometheus是开源时间序列数据库,擅长采集和存储指标;Grafana是可视化工具,支持从Prometheus拉取数据并创建仪表盘;两者结合可实现GitLab的全面监控与告警。
在Debian上通过以下命令下载并启动Prometheus(以v2.30.3为例):
wget https://github.com/prometheus/prometheus/releases/download/v2.30.3/prometheus-2.30.3.linux-amd64.tar.gz
tar xvfz prometheus-2.30.3.linux-amd64.tar.gz
cd prometheus-2.30.3.linux-amd64
./prometheus --config.file=prometheus.yml
默认监听9090端口,可通过http://<服务器IP>:9090访问Web界面。
编辑Prometheus配置文件prometheus.yml,添加GitLab监控任务(需将gitlab.example.com替换为实际域名/IP):
scrape_configs:
- job_name: 'gitlab'
static_configs:
- targets: ['gitlab.example.com:9090'] # GitLab默认暴露指标的端口
重启Prometheus使配置生效:./prometheus --config.file=prometheus.yml。
通过Debian官方源安装Grafana(简化依赖管理):
sudo apt-get update
sudo apt-get install -y apt-transport-https software-properties-common wget
wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -
sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"
sudo apt-get update
sudo apt-get install grafana
sudo systemctl start grafana-server # 启动服务
sudo systemctl enable grafana-server # 设置开机自启
访问http://<服务器IP>:3000,用默认账号admin/admin登录(首次登录需修改密码)。
在Grafana Web界面依次操作:
http://localhost:9090(若Prometheus在同一服务器);gitlab_runner_jobs_active表示活跃任务数、node_memory_MemAvailable_bytes表示可用内存);(sum(node_memory_MemAvailable_bytes{instance="gitlab.example.com"}) / sum(node_memory_MemTotal_bytes{instance="gitlab.example.com"})) < 0.2;1m(每分钟评估一次);5m(持续5分钟触发告警);二、使用GitLab自带监控工具(轻量级方案)
GitLab内置监控功能,无需额外安装工具,适合快速查看实例状态。
登录GitLab Web界面,点击左侧菜单栏Status,可查看GitLab组件(Web服务器、数据库、Sidekiq)的运行状态(如是否健康、响应时间)。
编辑GitLab配置文件/etc/gitlab/gitlab.rb,开启告警功能:
gitlab_rails['alert_monitor'] = true # 启用监控
gitlab_rails['alert_email'] = ['admin@example.com'] # 告警接收邮箱
gitlab_rails['alert_on_issues'] = true # Issue创建时告警
gitlab_rails['alert_on_merged_requests'] = true # MR合并时告警
保存后重新配置GitLab:sudo gitlab-ctl reconfigure,重启服务使配置生效。
三、日志监控与告警(ELK Stack)
通过ELK(Elasticsearch+Logstash+Kibana)收集和分析GitLab日志,实现故障定位与告警。
在Debian上通过以下命令安装:
sudo apt-get install elasticsearch logstash kibana
启动服务:
sudo systemctl start elasticsearch
sudo systemctl start logstash
sudo systemctl start kibana
Elasticsearch默认监听9200端口,Kibana默认监听5601端口。
创建Logstash配置文件/etc/logstash/conf.d/gitlab.conf,定义输入(GitLab日志路径)、过滤(解析日志格式)、输出(Elasticsearch):
input {
file {
path => "/var/log/gitlab/gitlab-rails/production.log" # GitLab Rails日志路径
start_position => "beginning"
}
}
filter {
grok { match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{LOGLEVEL:loglevel} %{GREEDYDATA: message}" } }
}
output {
elasticsearch {
hosts => ["localhost:9200"]
index => "gitlab-logs-%{+YYYY.MM.dd}"
}
}
重启Logstash使配置生效:sudo systemctl restart logstash。
http://<服务器IP>:5601),导入GitLab日志仪表板(可从Kibana官方库获取);四、第三方监控工具(可选)
若需要更全面的监控(如应用性能、分布式追踪),可使用Datadog、New Relic等第三方工具:
注意事项