最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

關(guān)于PostgreSQL錯(cuò)誤日志與慢查詢(xún)?nèi)罩臼占?/h1>
 更新時(shí)間:2021年01月07日 14:55:37   作者:207礦工  
這篇文章主要介紹了關(guān)于PostgreSQL錯(cuò)誤日志與慢查詢(xún)?nèi)罩臼占哂泻芎玫膮⒖純r(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

PostgreSQL錯(cuò)誤日志與慢查詢(xún)?nèi)罩緦?duì)于線(xiàn)上系統(tǒng)分析、問(wèn)題預(yù)警、問(wèn)題排查起到非常重要的作用,在此不做贅述。

此文檔記錄錯(cuò)誤日志與慢查詢(xún)?nèi)罩镜氖占?、分析與存儲(chǔ)展示的方法。

一、總體思路

PostgreSQL日志輸出可以配置多種多樣的格式,其中以csvlog格式輸出的日志信息最全面。但是CSV日志只能以本地文件的方式收集,不能直接寫(xiě)入網(wǎng)絡(luò),實(shí)時(shí)上傳日志服務(wù)器。

日志收集:

PostgreSQL服務(wù)器分布在不同的機(jī)器,我們使用rsyslog客戶(hù)端-服務(wù)器的方式來(lái)收集日志到日志服務(wù)器。具體方法:在PostgreSQL服務(wù)器部署客戶(hù)端,在日志服務(wù)器部署服務(wù)器,客戶(hù)端監(jiān)控日志文件的變化,實(shí)時(shí)將新增日志上傳到服務(wù)器,服務(wù)器根據(jù)不同客戶(hù)端上傳的日志,分別記錄在不同的文件中。

此方法的好處是在PostgreSQL服務(wù)器本地可以保存一份原始的完整的csv日志,供全量信息查看與分析。

日志分析:

使用Logstash進(jìn)行日志分析,Logstash是一個(gè)開(kāi)源數(shù)據(jù)收集引擎,具有實(shí)時(shí)管道功能。Logstash可以動(dòng)態(tài)地將來(lái)自不同文件的數(shù)據(jù)統(tǒng)一起來(lái),進(jìn)行數(shù)據(jù)篩選清洗,并將數(shù)據(jù)標(biāo)準(zhǔn)化到你所選擇的目的地。

日志存儲(chǔ)展示:

使用傳統(tǒng)的Elasticsearch進(jìn)行數(shù)據(jù)存儲(chǔ),Kibana進(jìn)行數(shù)據(jù)展示。

二、rsyslog服務(wù)器端配置

新增以下內(nèi)容到rsyslog配置文件/etc/rsyslog.conf,并重啟rsyslog服務(wù)。

$PreserveFQDN on   #用于正確的獲取主機(jī)名
$FileOwner root   #存儲(chǔ)的文件屬主
$FileGroup root   #文件屬主
$FileCreateMode 0644 #生成的文件權(quán)限
$DirCreateMode 0755 #生成的目錄權(quán)限
$Umask 0022
$PrivDropToUser root  #可以刪除日志的用戶(hù)
$PrivDropToGroup root  #可以刪除日志的用戶(hù)組
module(load="imuxsock")
module(load="imklog")
module(load="imudp")
#input(type="imudp" port="514")
module(load="imtcp" MaxSessions="500")
input(type="imtcp" port="514")​
$template linefmt,"%msg:2:$%\n"  #接收日志的格式(去掉開(kāi)頭的空格)​
$template pgloglocation,"/data/pglogs/%hostname%/%$YEAR%-%$MONTH%-%$DAY%.csv"​
:rawmsg,contains,"pg_5432" ?pgloglocation;linefmt
##變量:%fromhost-ip%

三、rsyslog客戶(hù)端配置

新建配置文件/etc/rsyslog.d/10-pg.conf,并重啟rsyslog服務(wù)。

cat /etc/rsyslog.d/10-pg.conf​
module(load="imuxsock")
module(load="imklog")
module(load="imfile")​
#module(load="imudp")
#input(type="imudp" port="514")​
module(load="imtcp" MaxSessions="500")
input(type="imtcp" port="514")​
ruleset(name="remote"){
    action(type="omfwd"
            target="x.x.x.x"  #日志服務(wù)器IP地址
            port="514"     #端口
            protocol="tcp"   #使用協(xié)議
            queue.type="linkedList" #使用異步處理
            queue.spoolDirectory="/var/log/rsyslog" #隊(duì)列目錄
            queue.fileName="pglog"         #隊(duì)列名稱(chēng)
            queue.maxDiskSpace="1g"         #隊(duì)列占最大磁盤(pán)空間
            queue.saveOnShutdown="on"  #保存內(nèi)存數(shù)據(jù)如果rsyslog關(guān)閉
            action.resumeRetryCount="-1" #無(wú)限重試插入失敗
       )
    stop
}​
​
input(
 type="imfile"
 File="/pg/data/log/*.csv" #PG服務(wù)器日志路徑
 Facility="local1"
 Severity="info"
 Tag="pg_5432"       #定義日志標(biāo)簽,重要,服務(wù)端根據(jù)這個(gè)標(biāo)簽可以識(shí)別日志
 PersistStateInterval="1"  #回寫(xiě)偏移量數(shù)據(jù)到文件間隔時(shí)間(秒),根據(jù)實(shí)際情況而定 
 deleteStateOnFileDelete="on" 
 reopenOnTruncate="on"
 Ruleset="remote"      #rsyslog.conf中定義的rule名稱(chēng)
)

四、logstash配置

在日志服務(wù)器上編輯好配置文件后,啟動(dòng)logstash即可。配置文件如下:

input {
 file {
  path => ["/data/pglogs/*/*.csv"]
  start_position => "end"
  codec => multiline {
   pattern => "^20[0-9]{2}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2}"
   negate => true
   what => "previous"
  }
 }
}
​
filter {
 csv {
  separator => ","
  columns => ["log_time","user_name","database_name","process_id","connection_from","session_id","session_line_num","command_tag","session_start_time","virtual_transaction_id","transaction_id","error_severity","sql_state_code","message","detail","hint","internal_query","internal_query_pos","context","query","query_pos","location","application_name"]
  convert => {
   "process_id" => "integer"
   "session_line_num" => "integer"
   "transaction_id" => "integer"
   "internal_query_pos" => "integer"
   "query_pos" => "integer"
  }
  skip_empty_columns => true
 }
​
 mutate{
   split => { "log_time" => " CST" }
   add_field => { "log_time_tmp" => "%{[log_time][0]}" }
   remove_field => ["log_time"]
 }
​
 date {
   match => ["log_time_tmp", "yyyy-MM-dd HH:mm:ss.SSS"]
   target => "@timestamp"
   locale => "cn"
   remove_field => ["log_time_tmp"]
 }
​
 if "duration:" in [message] and "ms" in [message] and "statement:" in [message] {
  grok{
   match => { "message" => "duration: %{NUMBER:duration} ms" }
  }
  mutate{
   split => { "message" => "statement: " }
   add_field => { "statement" => "%{[message][1]}" }
   remove_field => ["message"]
  }
 }
 mutate{
  split => { "path" => "/" }
  add_field => { "db_host" => "%{[path][3]}" }
  remove_field => ["path", "host"]
  convert => { "duration" => "float" }
 }
}​
​
output {
 if [error_severity] == "ERROR" or [error_severity] == "FATAL" or [error_severity] == "PANIC" {
  elasticsearch {
   hosts => ["x.x.x.x:x", "x.x.x.x:x"]
   index => "pg_error"
   id => "elasticsearch_pg_error"
  }
 }else if [duration] and [statement] {
  elasticsearch {
   hosts => ["x.x.x.x:x", "x.x.x.x:x"]
   index => "pg_slow"
   id => "elasticsearch_pg_slow"
  }
 }
}

五、此處省略了Elasticsearch存儲(chǔ)與Kibana展示,這里不多介紹

補(bǔ)充:PostgreSQL開(kāi)發(fā)者模式錯(cuò)誤反饋與日志設(shè)置

####when何時(shí)記錄

#client_min_messages = notice
log_min_messages = debug5 #debug級(jí)別是提供給開(kāi)發(fā)人員使用的,這個(gè)可以看到程序調(diào)用的信息以及SQL轉(zhuǎn)化為數(shù)據(jù)結(jié)構(gòu)的信息,每分鐘的級(jí)別

####where記錄到哪里

#log_destination = 'stderr'
logging_collector = on  #打開(kāi)日志收集
log_directory = 'pg_log' #日志目錄
log_filename = 'postgresql-%Y-%m-%d_%H%M%S.log'  

####what寫(xiě)什么日志

debug_print_parse = on #解析樹(shù)
debug_print_rewritten = on #查詢(xún)重寫(xiě)后的SQL
debug_print_plan = on  #執(zhí)行計(jì)劃詳細(xì)
debug_pretty_print = on #對(duì)debug_print_parse,debug_print_rewritten,debug_print_plan可讀性格式化
#log_checkpoints = off #如果是研究pg的磁盤(pán)IO,這個(gè)需要設(shè)置為on
log_connections = on #連接日志
log_disconnection = on #斷開(kāi)連接日志
#log_duration=on #語(yǔ)句執(zhí)行時(shí)間,對(duì)于分析

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • postgreSQL 使用timestamp轉(zhuǎn)成date格式

    postgreSQL 使用timestamp轉(zhuǎn)成date格式

    這篇文章主要介紹了postgreSQL 使用timestamp轉(zhuǎn)成date格式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL如何用psql運(yùn)行SQL文件

    PostgreSQL如何用psql運(yùn)行SQL文件

    文章介紹了兩種運(yùn)行預(yù)寫(xiě)好的SQL文件的方式:首先連接數(shù)據(jù)庫(kù)后執(zhí)行,或者直接通過(guò)psql命令執(zhí)行,需要注意的是,文件路徑在Linux系統(tǒng)中應(yīng)使用斜杠/,而不是反斜杠\,否則會(huì)報(bào)Permission denied錯(cuò)誤
    2024-12-12
  • PostgreSQL索引掃描時(shí)為什么index only scan不返回ctid

    PostgreSQL索引掃描時(shí)為什么index only scan不返回ctid

    這篇文章主要介紹了PostgreSQL索引掃描時(shí)為什么index only scan不返回ctid的原因探索,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • PostgreSQL怎么創(chuàng)建分區(qū)表詳解

    PostgreSQL怎么創(chuàng)建分區(qū)表詳解

    數(shù)據(jù)庫(kù)表分區(qū)把一個(gè)大的物理表分成若干個(gè)小的物理表,并使得這些小物理表在邏輯上可以被當(dāng)成一張表來(lái)使用,下面這篇文章主要給大家介紹了關(guān)于PostgreSQL怎么創(chuàng)建分區(qū)表的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 如何在PostgreSQL中查看有哪些用戶(hù)和用戶(hù)權(quán)限

    如何在PostgreSQL中查看有哪些用戶(hù)和用戶(hù)權(quán)限

    對(duì)于數(shù)據(jù)庫(kù)來(lái)說(shuō),用戶(hù)以及權(quán)限管理非常重要,讓不用的用戶(hù)具有不同的權(quán)限集合,將會(huì)顯著的避免誤操作,這篇文章主要介紹了在PostgreSQL中查看有哪些用戶(hù)和用戶(hù)權(quán)限的相關(guān)資料,需要的朋友可以參考下
    2025-10-10
  • PostgreSQL WHERE 子句的實(shí)現(xiàn)示例

    PostgreSQL WHERE 子句的實(shí)現(xiàn)示例

    WHERE子句是PostgreSQL中用于過(guò)濾數(shù)據(jù)的核心語(yǔ)法元素,它允許我們指定條件來(lái)限制查詢(xún)返回的行,本文就來(lái)詳細(xì)的介紹一下PostgreSQL WHERE 子句的實(shí)現(xiàn)示例,感興趣的可以了解一下
    2025-11-11
  • PostgreSQL Sequence序列的使用詳解

    PostgreSQL Sequence序列的使用詳解

    這篇文章主要介紹了PostgreSQL Sequence序列的使用詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • Docker安裝PostgreSQL數(shù)據(jù)庫(kù)的詳細(xì)步驟

    Docker安裝PostgreSQL數(shù)據(jù)庫(kù)的詳細(xì)步驟

    這篇文章主要介紹了Docker安裝PostgreSQL數(shù)據(jù)庫(kù)的詳細(xì)步驟,包括啟動(dòng)PostgreSQL容器、獲取容器的IP地址、啟動(dòng)一個(gè)新的CentOS容器、在CentOS容器中安裝PostgreSQL客戶(hù)端、通過(guò)psql客戶(hù)端連接到PostgreSQL容器和在PostgreSQL中執(zhí)行SQL操作等內(nèi)容,需要的朋友可以參考下
    2024-10-10
  • PostgreSQL中常用的時(shí)間日期腳本使用教程

    PostgreSQL中常用的時(shí)間日期腳本使用教程

    PostgreSQL是一款簡(jiǎn)介而又性能強(qiáng)大的數(shù)據(jù)庫(kù)應(yīng)用程序,其在日期時(shí)間數(shù)據(jù)方面所支持的功能也都非常給力,下面就來(lái)看一下PostgreSQL中常用的日期時(shí)間腳本使用教程.
    2016-05-05
  • PostgreSQL數(shù)據(jù)庫(kù)升級(jí)的完整流程與注意事項(xiàng)

    PostgreSQL數(shù)據(jù)庫(kù)升級(jí)的完整流程與注意事項(xiàng)

    在現(xiàn)代軟件開(kāi)發(fā)和運(yùn)維實(shí)踐中,數(shù)據(jù)庫(kù)作為核心基礎(chǔ)設(shè)施,其穩(wěn)定性和性能至關(guān)重要,PostgreSQL 作為一款功能強(qiáng)大、開(kāi)源且高度可靠的數(shù)據(jù)庫(kù)管理系統(tǒng),持續(xù)推出新版本以增強(qiáng)性能、安全性和功能特性,所以本文將深入探討 PostgreSQL 數(shù)據(jù)庫(kù)升級(jí)的完整流程,需要的朋友可以參考下
    2026-03-03

最新評(píng)論

清丰县| 新绛县| 竹溪县| 北安市| 阿合奇县| 寿光市| 望城县| 舒城县| 奎屯市| 宁远县| 大洼县| 灵宝市| 龙州县| 安新县| 凤城市| 塔河县| 阜城县| 灵石县| 湖北省| 马尔康县| 玛曲县| 孟州市| 尚义县| 扶风县| 淅川县| 石楼县| 彝良县| 古蔺县| 德清县| 宜兰市| 阿尔山市| 旬邑县| 余江县| 普陀区| 博湖县| 阳东县| 桃源县| 华安县| 武穴市| 法库县| 蛟河市|