【问题标题】:Prometheus WAL Keeps on Growing IndefinitelyPrometheus WAL 继续无限增长
【发布时间】:2020-09-18 15:34:02
【问题描述】:

目前,我正在运行 Prometheus v2.20.0,它存在 WAL 不断增长并占用磁盘空间的问题。

实际上现在磁盘空间不是问题,而是 WAL 文件夹没有被清理,所以如果任何时候 Prometheus 重新启动,它都会尝试将整个 WAL 加载到内存中。

例如,WAL 现在是 60GB,内存是 32GB,所以 Prometheus 在被 OOM 杀死时会继续重启,因为它消耗了 24GB 的整个服务器内存。

这是我当前的配置,请注意我使用 Docker Compose 运行它。

   - '--web.enable-admin-api'
   - '--config.file=/etc/prometheus/prometheus.yml'
   - '--web.external-url=https://prometheus.example.com'
   - '--storage.tsdb.path=/var/lib/prometheus'
   - '--storage.tsdb.retention=150d'
   - '--web.console.libraries=/usr/share/prometheus/console_libraries'
   - '--web.console.templates=/usr/share/prometheus/consoles'

所以我的问题是,我如何配置它以对 WAL 进行适当的检查点和清理,使其不会无限期地增长?

【问题讨论】:

标签: prometheus prometheus-alertmanager prometheus-java


【解决方案1】:

这似乎是 Prometheus v2.20.0 中的一个已知错误,升级到 v2.21.0 修复了它。 https://github.com/prometheus/prometheus/issues/7955

【讨论】:

    【解决方案2】:

    对于那些仍然遇到相同错误并且只打算使用 prometheus - 对于警报,可以使用以下代码作为实例中的 sidecar 或服务 (golang):

    apiVersion: v1
    kind: ConfigMap
    metadata:
      name: server-code
    data:
      sam.go: |
        package main
    
        import (
            "fmt"
            "log"
            "net/http"
            "os"
            "os/exec"
            "strconv"
            "strings"
            "time"
        )
    
        func delete() {
            folder := []string{"/data/wal", "/data/chunks_head"}
            for i := 0; i < len(folder); i++ {
                e := os.RemoveAll(folder[i])
                fmt.Println(" Removed ", e)
            }
              }
        func create() {
            folder := []string{"/data/wal", "/data/chunks_head"}
            for i := 0; i < len(folder); i++ {
                        _, e := os.Stat(folder[i])
                        if e != nil {
                err1 := os.MkdirAll(folder[i], os.FileMode(0777))
                err := os.Chown(folder[i], 65534, 65534)
                if err != nil || err1 != nil {
                    log.Println(err, err1)
                       }
                       }
    
               }
                   _, err_fi := os.Stat("/data/queries.active")
                  if os.IsNotExist(err_fi) {
                         fmt.Println("Creating /data/queries.active ")
                         emptyFile, err := os.Create("/data/queries.active")
                         if err != nil {
                             log.Fatal(err)
                             }
                         err_f := os.Chown("/data/queries.active", 65534, 65534)
                         if err_f != nil {
                              log.Println("Ffile is created")
                              emptyFile.Close()
                           }
                       }
                  }
        func main() {
            for {
                time.Sleep(1 * time.Second)
                out, err := exec.Command("du", "-sk", "/data/wal").Output()
                if err == nil {
                    d := strings.Fields(string(out))[0]
                    f := strings.Replace(d, "K", "", 1)
                    if f1, e := strconv.Atoi(f); f1 > 5242880 && e == nil {
                        delete()
                                        create()
    
                    } else {
                        fmt.Println("Size is less "+d+" ==>  %q", (time.Now()))
                    }
    
                    url := "http://localhost:9090/graph"
    
                    req, _ := http.NewRequest("GET", url, nil)
    
                    res, _ := http.DefaultClient.Do(req)
    
                                     if res == nil {
                                  delete()
                                                  create()
                                 }
    
    
    
                } else {
                    fmt.Printf("Folder %q is not exists  ==>  %q"+"\n", ("/data/wal"), (time.Now()))
                                create()
                }
    
            }
    
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-17
      • 1970-01-01
      • 2020-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多