rsyslog queue

http://www.rsyslog.com/doc/v8-stable/concepts/queues.html
1.所有消息先進主隊列,再根據過濾器進響應隊列,進去之後主隊列消息刪除;
2.$MainMsgQueueSaveOnShutdown on;

3.設置隊列模型 : $<object>QueueType

4. 直接隊列: $<object>QueueType Directory
5. 硬盤隊列: 超可靠,但是最慢,不推薦
   前綴:$<object>QueueFilename
   分塊寫,每個塊寫自己的文件,前綴如上,接7個數字,從1開始,默認10mb,可設置大小:$<object>QueueMaxFileSize,但是大小要求不嚴格,rsyslog總是寫完整個隊列條目,即使違反大小限制;200G硬盤推薦設置爲2G
   在隊列創建之前,使用$WorkDirectory命令指定不同的硬盤可以提高性能;
   創建硬盤隊列:$<object>QueueType Disk;
   隊列檢查時間間隔:$<object>QueueCheckpointInterval;
   每個寫操作同步(性能消耗嚴重):<object>QueueSyncQueueFiles on/off;

6. 內存隊列
   保存數據不限時間
   LinkedList模式:動態分配,可以存儲大量數據:$<object>QueueType LinkedList;
   FixedArray模式:固定大小,預先分配,對於數據量小,效率要求高可以使用:$<object>QueueType FixedArray;

7. 硬盤輔助內存隊列
   創建:如果使用命令$<object>QueueFileName創建一個跟內存隊列同名的硬盤隊列,則硬盤隊列自動變爲硬盤輔助隊列(disk-assisted DA)
    內存隊列和硬盤隊列是串聯方式,如果內存滿了或者要關機,則硬盤隊列被激活;
    推薦數據庫action或通過tcp發送的action都使用硬盤輔助隊列;
    high watermark 命令:$<object>QueueHighWatermark,隊列中數據量達到該值時,回寫到磁盤;
    low watermark 命令:$<object>QueueLowWatermark, 隊列中數據量降到該值時,停止回寫磁盤;

8. 限制隊列大小
    $<object>QueueSize : 隊列可以接收的最大條目數
    $<object>QueueMaxDiskSpace : 硬盤隊列最大磁盤大小

9. 工作線程池
    $<object>QueueWorkerThreadMinimumMessages : 該值爲一個線程最多處理的消息數,大於該值,並且不會超過線程數限制,會創建新工作線程;
    $<object>QueueWorkerThreads: 限制最多的線程數
    $<object>QueueWorkerTimeoutThreadShutdown : 工作線程超時多長時間退出,單位毫秒,0爲立即退出,-1爲永不退出;


10. 消息丟棄
    $<object>QueueDiscardMark : 隊列消息數高於該值將會自動丟棄不重要的消息,丟棄順序是新消息在隊列頭,先丟棄;
    $<object>QueueDiscardSeverity: 設置隊列丟棄消息級別,級別越低,丟棄越多,設置爲高於隊列大小或者設置爲8,則不丟棄。值使用數字和文本都可以,級別在RFC 3164中定義,。
Code     Severity
0     Emergency: system is unusable
1     Alert: action must be taken immediately
2     Critical: critical conditions
3     Error: error conditions
4     Warning: warning conditions
5     Notice: normal but significant condition
6     Informational: informational messages
7     Debug: debug-level messages


11. 滿隊列
    如果隊列達到設置的最大值或者最大磁盤空間,隊列就滿了。rsyslog會關閉節流閥(throttles),這個時候對於可靠的輸入(tcp/本地日誌socket)的一個好的解決方案是降低消息產生;
    關閉節流閥對於不可靠源,比如UDP,是高度不推薦的;
    不能無限不操作,比如對本地日誌socket節流時間太長會造成整個系統停頓;
    $<object>QueueTimeoutEnqueue : 設置超時時間,單位毫秒,達到時間後新到的消息將被丟棄;如果不想節流,將值設置爲0;
    
    
12. 速率限制
    $<object>QueueDequeueSlowdown : 出隊列延遲多長時間,單位微秒(microseconds),如在udp發送action中設置爲1000 微秒,則限制1秒內不多與1000條。

13. 操作時間跨度
    $<object>QueueDequeueTimeBegin <hour> : 設置開始出隊時間,單位小時,採用24小時格式;
    $<object>QueueDequeueTimeEnd <hour>: 設置結束出隊時間。

14. 性能
    <object>DequeueBatchSize <number> : 一批發送消息的上限條數,該上限由可用性決定,隊列從來不會等該批次達到個數再發,如果隊列中消息沒有達到上限條數,即使只有一條,也會發出。[default 32] 設置多少條隊列作爲一個batch一起出隊,針對一個日誌量很大的系統,可以考慮把這個值調高來增加性能,不過要結合可使用內存考慮實際情況。對於一個高併發服務端,可以設置大值(1000左右或者更多),但是考慮需要內存則需要 批次大小*工作線程數 ,即使用的硬盤隊列也需要這麼多內存。


15. 終止隊列
    程序關閉時,第一個階段:
    $<object>QueueTimeoutShutdown: 當進程關閉時,設定超時時間讓隊列工作線程去處理沒有處理完的元素,單位毫秒;
    第二個階段:
    $<object>QueueTimeoutActionCompletion : 如果第一階段之後還有元素沒有被處理,該命令用來設置工作線程處理當前元素的超時時間,單位毫秒,如果到期之後,其他消息都會被丟棄,所有剩餘的工作線程被取消,隊列也會被銷燬;

    $<object>QueueSaveOnShutdown :如果是硬盤隊列或者硬盤輔助隊列,在關機時不想丟失數據,可以將該命令設置爲on,則會將所有隊列中的元素保存到硬盤。如果隊列元素較多,該操作會耗時較長,並且不能設置超時。
    

發佈了63 篇原創文章 · 獲贊 25 · 訪問量 18萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章