如何解決系統報錯:nf_conntrack: table full, dropping packets-每日快報

        博客園 2023-06-12 22:25:14

        問題

        在系統日志中(/var/log/messages),有時會看到大面積的下面的報錯:

        nf_conntrack: table full, dropping packet

        這說明系統接到了大量的連接請求,但是系統的連接跟蹤表已經滿了,無法再記錄新的連接了。這時候,系統會丟棄新的連接請求。


        (資料圖片)

        在 CentOS 下,默認的連接跟蹤表大小是 65536,可以通過下面的命令查看:

        cat /proc/sys/net/netfilter/nf_conntrack_max

        如果流量比較小,這個值是沒問題的,但如果流量巨大,這個值可能就有點太小了。

        解決方法

        顯然,調大最大值的限制就可以了。不過更大的限制意味著可以承接更多連接,意味著要耗費更多資源,這點要注意。

        查看當前有多少活躍連接:

        cat /proc/sys/net/netfilter/nf_conntrack_count

        如果這個值跟上面介紹的 nf_conntrack_max 已經很接近了,就說明快滿了,需要調大 nf_conntrack_max??梢允褂孟旅娴拿钆R時調大:

        echo 524288 > /proc/sys/net/netfilter/nf_conntrack_max

        如果不想每次重啟都要重新設置,可以修改 /etc/sysctl.conf,加入下面的配置:

        net.netfilter.nf_conntrack_max = 524288

        為了緩解大量連接的問題,您可能還需要考慮減少服務器等待連接關閉/超時的時間。在 /etc/sysctl.conf 中加入下面的配置:

        net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 60net.netfilter.nf_conntrack_tcp_timeout_time_wait = 60

        如何監控

        平時使用 categraf(https://github.com/flashcatcloud/categraf) 監控就可以了,categraf 提供了 input.conntrack 采集插件,可以采集 conntrack 的信息,建議采集配置如下:

        conf/input.conntrack/conntrack.toml:

        files = [    "ip_conntrack_count",    "ip_conntrack_max",    "nf_conntrack_count",    "nf_conntrack_max"]dirs = [    "/proc/sys/net/ipv4/netfilter",    "/proc/sys/net/netfilter"]# ignore errorsquiet = true

        完事配置一個類似下面的監控規則即可:

        conntrack_ip_conntrack_count / ip_conntrack_max > 0.8

        另一個監控方案,是直接監控系統日志,算是一個兜底監控方案,可以采用 catpaw 來監控,catpaw 提供了 journaltail 采集插件,可以讀取近期系統日志,grep 關鍵字,如果出現異常關鍵字就告警,配置如下:

        conf.d/p.journaltail/journaltail.toml:

        [[instances]]# journalctl -S -${time_span}time_span = "1m"# relationship: orkeywords = ["Out of memory", "nf_conntrack: table full, dropping packets"]# check rule namecheck = "Critical System Errors"# # gather intervalinterval = "30s"[instances.alerting]## Enable alerting or notenabled = true## Same functionality as Prometheus keyword "for"for_duration = 0## Minimum interval duration between notificationsrepeat_interval = "5m"## Maximum number of notificationsrepeat_number = 3## Whether notify recovery eventrecovery_notification = true## Choice: Critical, Warning, Infodefault_severity = "Warning"

        catpaw 的入門使用,可以參考文章:《太卷了,史上最簡單的監控系統 catpaw 簡介》

        關鍵詞:

        免責聲明:市場有風險,選擇需謹慎!此文僅供參考,不作買賣依據。

        最新推薦