PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Cách giám sát PostgreSQL bằng Nagios

Giới thiệu

Bất kể công nghệ cơ sở dữ liệu nào, cần phải có thiết lập giám sát, để phát hiện sự cố và thực hiện hành động, hoặc đơn giản là để biết trạng thái hiện tại của hệ thống của chúng tôi.

Vì mục đích này, có một số công cụ, trả phí và miễn phí. Trong blog này, chúng tôi sẽ tập trung vào một đặc biệt:Nagios Core.

Nagios Core là gì?

Nagios Core là một hệ thống Mã nguồn mở để giám sát máy chủ, mạng và dịch vụ. Nó cho phép cấu hình các cảnh báo và có các trạng thái khác nhau cho chúng. Nó cho phép triển khai các plugin do cộng đồng phát triển hoặc thậm chí cho phép chúng tôi định cấu hình các tập lệnh giám sát của riêng mình.

Cách cài đặt Nagios?

Tài liệu chính thức hướng dẫn chúng ta cách cài đặt Nagios Core trên hệ thống CentOS hoặc Ubuntu.

Hãy xem ví dụ về các bước cần thiết để cài đặt trên CentOS 7.

Gói bắt buộc

[[email protected] ~]# yum install -y wget httpd php gcc glibc glibc-common gd gd-devel make net-snmp unzip

Tải xuống Nagios Core, Nagios Plugins và NRPE

[[email protected] ~]# wget https://assets.nagios.com/downloads/nagioscore/releases/nagios-4.4.2.tar.gz
[[email protected] ~]# wget http://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz
[[email protected] ~]# wget https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-3.2.1/nrpe-3.2.1.tar.gz

Thêm người dùng và nhóm Nagios

[[email protected] ~]# useradd nagios
[[email protected] ~]# groupadd nagcmd
[[email protected] ~]# usermod -a -G nagcmd nagios
[[email protected] ~]# usermod -a -G nagios,nagcmd apache

Cài đặt Nagios

[[email protected] ~]# tar zxvf nagios-4.4.2.tar.gz
[[email protected] ~]# cd nagios-4.4.2
[[email protected] nagios-4.4.2]# ./configure --with-command-group=nagcmd
[[email protected] nagios-4.4.2]# make all
[[email protected] nagios-4.4.2]# make install
[[email protected] nagios-4.4.2]# make install-init
[[email protected] nagios-4.4.2]# make install-config
[[email protected] nagios-4.4.2]# make install-commandmode
[[email protected] nagios-4.4.2]# make install-webconf
[[email protected] nagios-4.4.2]# cp -R contrib/eventhandlers/ /usr/local/nagios/libexec/
[[email protected] nagios-4.4.2]# chown -R nagios:nagios /usr/local/nagios/libexec/eventhandlers
[[email protected] nagios-4.4.2]# /usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Cài đặt trình cắm Nagios và NRPE

[[email protected] ~]# tar zxvf nagios-plugins-2.2.1.tar.gz
[[email protected] ~]# cd nagios-plugins-2.2.1
[[email protected] nagios-plugins-2.2.1]# ./configure --with-nagios-user=nagios --with-nagios-group=nagios
[[email protected] nagios-plugins-2.2.1]# make
[[email protected] nagios-plugins-2.2.1]# make install
[[email protected] ~]# yum install epel-release
[[email protected] ~]# yum install nagios-plugins-nrpe
[[email protected] ~]# tar zxvf nrpe-3.2.1.tar.gz
[[email protected] ~]# cd nrpe-3.2.1
[[email protected] nrpe-3.2.1]# ./configure --disable-ssl --enable-command-args
[[email protected] nrpe-3.2.1]# make all
[[email protected] nrpe-3.2.1]# make install-plugin

Chúng tôi thêm dòng sau vào cuối tệp /usr/local/nagios/etc/objects/command.cfg để sử dụng NRPE khi kiểm tra máy chủ của chúng tôi:

define command{
    command_name           check_nrpe
    command_line           /usr/local/nagios/libexec/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
}

Nagios bắt đầu

[[email protected] nagios-4.4.2]# systemctl start nagios
[[email protected] nagios-4.4.2]# systemctl start httpd

Truy cập web

Chúng tôi tạo ra người dùng để truy cập giao diện web và chúng tôi có thể vào trang web.

[[email protected] nagios-4.4.2]# htpasswd -c /usr/local/nagios/etc/htpasswd.users nagiosadmin

http:// IP_Address / nagios /

Truy cập web Nagios

Làm thế nào để định cấu hình Nagios?

Bây giờ chúng ta đã cài đặt xong Nagios, chúng ta có thể tiếp tục với cấu hình. Đối với điều này, chúng tôi phải đi đến vị trí tương ứng với cài đặt của chúng tôi, trong ví dụ / usr / local / nagios / etc của chúng tôi.

Có một số tệp cấu hình khác nhau mà bạn sẽ cần tạo hoặc chỉnh sửa trước khi bắt đầu theo dõi bất kỳ thứ gì.

[[email protected] etc]# ls /usr/local/nagios/etc
cgi.cfg  htpasswd.users  nagios.cfg  objects  resource.cfg
  • cgi.cfg: Tệp cấu hình CGI chứa một số chỉ thị ảnh hưởng đến hoạt động của CGI. Nó cũng chứa tham chiếu đến tệp cấu hình chính, vì vậy CGI biết cách bạn đã định cấu hình Nagios và nơi lưu trữ các định nghĩa đối tượng của bạn.
  • htpasswd.users: Tệp này chứa những người dùng được tạo để truy cập giao diện web Nagios.
  • nagios.cfg: Tệp cấu hình chính chứa một số lệnh ảnh hưởng đến cách hoạt động của trình nền Nagios Core.
  • đối tượng: Khi bạn cài đặt Nagios, một số tệp cấu hình đối tượng mẫu được đặt ở đây. Bạn có thể sử dụng các tệp mẫu này để xem cách kế thừa đối tượng hoạt động và tìm hiểu cách xác định các định nghĩa đối tượng của riêng bạn. Đối tượng là tất cả các yếu tố liên quan đến logic thông báo và giám sát.
  • resource.cfg: Điều này được sử dụng để chỉ định một tệp tài nguyên tùy chọn có thể chứa các định nghĩa macro. Macro cho phép bạn tham chiếu thông tin của máy chủ, dịch vụ và các nguồn khác trong lệnh của bạn.

Trong các đối tượng, chúng ta có thể tìm thấy các mẫu, có thể được sử dụng khi tạo các đối tượng mới. Ví dụ:chúng tôi có thể thấy rằng trong tệp /usr/local/nagios/etc/objects/templates.cfg của chúng tôi, có một mẫu tên là linux-server, sẽ được sử dụng để thêm các máy chủ của chúng tôi.

define host {
    name                            linux-server            ; The name of this host template
    use                             generic-host            ; This template inherits other values from the generic-host template
    check_period                    24x7                    ; By default, Linux hosts are checked round the clock
    check_interval                  5                       ; Actively check the host every 5 minutes
    retry_interval                  1                       ; Schedule host check retries at 1 minute intervals
    max_check_attempts              10                      ; Check each Linux host 10 times (max)
    check_command                   check-host-alive        ; Default command to check Linux hosts
    notification_period             workhours               ; Linux admins hate to be woken up, so we only notify during the day
                                                           ; Note that the notification_period variable is being overridden from
                                                           ; the value that is inherited from the generic-host template!
    notification_interval           120                     ; Resend notifications every 2 hours
    notification_options            d,u,r                   ; Only send notifications for specific host states
    contact_groups                  admins                  ; Notifications get sent to the admins by default
    register                        0                       ; DON'T REGISTER THIS DEFINITION - ITS NOT A REAL HOST, JUST A TEMPLATE!
}

Sử dụng mẫu này, các máy chủ của chúng tôi sẽ kế thừa cấu hình mà không cần phải chỉ định từng cấu hình một trên mỗi máy chủ mà chúng tôi thêm vào.

Chúng tôi cũng có các lệnh, danh bạ và khoảng thời gian xác định trước.

Các lệnh sẽ được Nagios sử dụng để kiểm tra và đó là những gì chúng tôi thêm vào trong tệp cấu hình của mỗi máy chủ để giám sát nó. Ví dụ:PING:

define command {
    command_name    check_ping
    command_line    $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
}

Chúng tôi có khả năng tạo liên hệ hoặc nhóm và chỉ định thông báo nào tôi muốn liên hệ với người hoặc nhóm nào.

define contact {
    contact_name            nagiosadmin             ; Short name of user
    use                     generic-contact         ; Inherit default values from generic-contact template (defined above)
    alias                   Nagios Admin            ; Full name of user
    email                   [email protected] ; <<***** CHANGE THIS TO YOUR EMAIL ADDRESS ******
}

Đối với séc và cảnh báo của chúng tôi, chúng tôi có thể định cấu hình những giờ và ngày chúng tôi muốn nhận chúng. Nếu chúng tôi có một dịch vụ không quan trọng, chúng tôi có thể không muốn thức dậy vào lúc bình minh, vì vậy tốt hơn là chỉ nên thông báo trong giờ làm việc để tránh điều này.

define timeperiod {
    name                    workhours
    timeperiod_name         workhours
    alias                   Normal Work Hours
    monday                  09:00-17:00
    tuesday                 09:00-17:00
    wednesday               09:00-17:00
    thursday                09:00-17:00
    friday                  09:00-17:00
}

Bây giờ hãy xem cách thêm cảnh báo vào Nagios của chúng tôi.

Chúng tôi sẽ giám sát các máy chủ PostgreSQL của mình, vì vậy trước tiên chúng tôi thêm chúng làm máy chủ trong thư mục đối tượng của chúng tôi. Chúng tôi sẽ tạo 3 tệp mới:

[[email protected] ~]# cd /usr/local/nagios/etc/objects/
[[email protected] objects]# vi postgres1.cfg
define host {
    use        linux-server      ; Name of host template to use
    host_name    postgres1        ; Hostname
    alias        PostgreSQL1        ; Alias
    address    192.168.100.123    ; IP Address
}
[[email protected] objects]# vi postgres2.cfg
define host {
    use        linux-server      ; Name of host template to use
    host_name    postgres2        ; Hostname
    alias        PostgreSQL2        ; Alias
    address    192.168.100.124    ; IP Address
}
[[email protected] objects]# vi postgres3.cfg
define host {
    use        linux-server      ; Name of host template to use
    host_name    postgres3        ; Hostname
    alias        PostgreSQL3        ; Alias
    address    192.168.100.125    ; IP Address
}

Sau đó, chúng tôi phải thêm chúng vào tệp nagios.cfg và ở đây chúng tôi có 2 tùy chọn.

Thêm lần lượt các máy chủ của chúng tôi (tệp cfg) bằng cách sử dụng biến cfg_file (tùy chọn mặc định) hoặc thêm tất cả các tệp cfg mà chúng tôi có bên trong thư mục bằng cách sử dụng biến cfg_dir.

Chúng tôi sẽ thêm từng tệp một theo chiến lược mặc định.

cfg_file=/usr/local/nagios/etc/objects/postgres1.cfg
cfg_file=/usr/local/nagios/etc/objects/postgres2.cfg
cfg_file=/usr/local/nagios/etc/objects/postgres3.cfg

Với điều này, chúng tôi đã giám sát các máy chủ của chúng tôi. Bây giờ chúng ta chỉ cần thêm những dịch vụ mà chúng ta muốn giám sát. Đối với điều này, chúng tôi sẽ sử dụng một số kiểm tra đã được xác định (check_ssh và check_ping) và chúng tôi sẽ thêm một số kiểm tra cơ bản của hệ điều hành như tải và dung lượng đĩa, trong số những kiểm tra khác, sử dụng NRPE.

Tải xuống Báo cáo chính thức hôm nay Quản lý &Tự động hóa PostgreSQL với ClusterControlTìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng PostgreSQLTải xuống Báo cáo chính thức

NRPE là gì?

Trình thực thi plugin từ xa của Nagios. Công cụ này cho phép chúng tôi thực thi các plugin Nagios trên máy chủ từ xa một cách minh bạch nhất có thể.

Để sử dụng nó, chúng tôi phải cài đặt máy chủ trong mỗi nút mà chúng tôi muốn giám sát và Nagios của chúng tôi sẽ kết nối như một máy khách với mỗi nút, thực thi (các) plugin tương ứng.

Làm cách nào để cài đặt NRPE?

[[email protected] ~]# wget https://github.com/NagiosEnterprises/nrpe/releases/download/nrpe-3.2.1/nrpe-3.2.1.tar.gz
[[email protected] ~]# wget http://nagios-plugins.org/download/nagios-plugins-2.2.1.tar.gz
[[email protected] ~]# tar zxvf nagios-plugins-2.2.1.tar.gz
[[email protected] ~]# tar zxvf nrpe-3.2.1.tar.gz
[[email protected] ~]# cd nrpe-3.2.1
[[email protected] nrpe-3.2.1]# ./configure --disable-ssl --enable-command-args
[[email protected] nrpe-3.2.1]# make all
[[email protected] nrpe-3.2.1]# make install-groups-users
[[email protected] nrpe-3.2.1]# make install
[[email protected] nrpe-3.2.1]# make install-config
[[email protected] nrpe-3.2.1]# make install-init
[[email protected] ~]# cd nagios-plugins-2.2.1
[[email protected] nagios-plugins-2.2.1]# ./configure --with-nagios-user=nagios --with-nagios-group=nagios
[[email protected] nagios-plugins-2.2.1]# make
[[email protected] nagios-plugins-2.2.1]# make install
[[email protected] nagios-plugins-2.2.1]# systemctl enable nrpe

Sau đó, chúng tôi chỉnh sửa tệp cấu hình /usr/local/nagios/etc/nrpe.cfg

server_address=<Local IP Address>
allowed_hosts=127.0.0.1,<Nagios Server IP Address>

Và chúng tôi khởi động lại dịch vụ NRPE:

[[email protected] ~]# systemctl restart nrpe

Chúng tôi có thể kiểm tra kết nối bằng cách chạy phần sau từ máy chủ Nagios của chúng tôi:

[[email protected] ~]# /usr/local/nagios/libexec/check_nrpe -H <Node IP Address>
NRPE v3.2.1

Làm cách nào để giám sát PostgreSQL?

Khi theo dõi PostgreSQL, có hai lĩnh vực chính cần lưu ý:hệ điều hành và cơ sở dữ liệu.

Đối với hệ điều hành, NRPE có một số kiểm tra cơ bản được cấu hình như dung lượng ổ đĩa và tải, trong số những thứ khác. Các kiểm tra này có thể được kích hoạt rất dễ dàng theo cách sau.

Trong các nút của chúng tôi, chúng tôi chỉnh sửa tệp /usr/local/nagios/etc/nrpe.cfg và chuyển đến vị trí của các dòng sau:

command[check_users]=/usr/local/nagios/libexec/check_users -w 5 -c 10
command[check_load]=/usr/local/nagios/libexec/check_load -r -w 15,10,05 -c 30,25,20
command[check_disk]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /
command[check_zombie_procs]=/usr/local/nagios/libexec/check_procs -w 5 -c 10 -s Z
command[check_total_procs]=/usr/local/nagios/libexec/check_procs -w 150 -c 200

Tên trong dấu ngoặc vuông là những tên mà chúng tôi sẽ sử dụng trong máy chủ Nagios của mình để kích hoạt các kiểm tra này.

Trong Nagios của chúng tôi, chúng tôi chỉnh sửa các tệp của 3 nút:

/usr/local/nagios/etc/objects/postgres1.cfg
/usr/local/nagios/etc/objects/postgres2.cfg
/usr/local/nagios/etc/objects/postgres3.cfg

Chúng tôi thêm các kiểm tra này mà chúng tôi đã thấy trước đây, để lại các tệp của chúng tôi như sau:

define host {
    use                     linux-server
    host_name               postgres1
    alias                   PostgreSQL1
    address                 192.168.100.123
}
define service {
    use                     generic-service
    host_name               postgres1
    service_description     PING
    check_command           check_ping!100.0,20%!500.0,60%
}
define service {
    use                     generic-service
    host_name               postgres1
    service_description     SSH
    check_command           check_ssh
}
define service {
    use                     generic-service
    host_name               postgres1
    service_description     Root Partition
    check_command        check_nrpe!check_disk
}
define service {
    use                     generic-service
    host_name               postgres1
    service_description     Total Processes zombie
    check_command           check_nrpe!check_zombie_procs
}
define service {
    use                     generic-service
    host_name               postgres1
    service_description     Total Processes
    check_command           check_nrpe!check_total_procs
}
define service {
    use                     generic-service
    host_name               postgres1
    service_description     Current Load
    check_command           check_nrpe!check_load
}
define service {
    use                     generic-service
    host_name               postgres1
    service_description     Current Users
    check_command           check_nrpe!check_users
}

Và chúng tôi khởi động lại dịch vụ nagios:

[[email protected] ~]# systemctl start nagios

Tại thời điểm này, nếu chúng ta đi đến phần dịch vụ trong giao diện web của Nagios, chúng ta sẽ có một cái gì đó như sau:

Cảnh báo máy chủ Nagios

Theo cách này, chúng tôi sẽ bao gồm các bước kiểm tra cơ bản của máy chủ của chúng tôi ở cấp hệ điều hành.

Chúng tôi có nhiều séc khác mà chúng tôi có thể thêm vào và chúng tôi thậm chí có thể tạo séc của riêng mình (chúng ta sẽ xem ví dụ sau).

Bây giờ, hãy xem cách theo dõi công cụ cơ sở dữ liệu PostgreSQL của chúng tôi bằng cách sử dụng hai trong số các plugin chính được thiết kế cho tác vụ này.

Check_postgres

Một trong những plugin phổ biến nhất để kiểm tra PostgreSQL là check_postgres từ Bucardo.

Hãy xem cách cài đặt nó và cách sử dụng nó với cơ sở dữ liệu PostgreSQL của chúng tôi.

Gói bắt buộc

[[email protected] ~]# yum install perl-devel

Cài đặt

[[email protected] ~]#  wget http://bucardo.org/downloads/check_postgres.tar.gz
[[email protected] ~]#  tar zxvf check_postgres.tar.gz
[[email protected] ~]#  cp check_postgres-2.23.0/check_postgres.pl /usr/local/nagios/libexec/
[[email protected] ~]# chown nagios.nagios /usr/local/nagios/libexec/check_postgres.pl
[[email protected] ~]# cd /usr/local/nagios/libexec/
[[email protected] libexec]# perl /usr/local/nagios/libexec/check_postgres.pl  --symlinks

Lệnh cuối cùng này tạo các liên kết để sử dụng tất cả các chức năng của kiểm tra này, chẳng hạn như check_postgres_connection, check_postgres_last_vacuum hoặc check_postgres_replication_slots trong số các chức năng khác.

[[email protected] libexec]# ls |grep postgres
check_postgres.pl
check_postgres_archive_ready
check_postgres_autovac_freeze
check_postgres_backends
check_postgres_bloat
check_postgres_checkpoint
check_postgres_cluster_id
check_postgres_commitratio
check_postgres_connection
check_postgres_custom_query
check_postgres_database_size
check_postgres_dbstats
check_postgres_disabled_triggers
check_postgres_disk_space
…

Chúng tôi thêm vào tệp cấu hình NRPE của mình (/usr/local/nagios/etc/nrpe.cfg) dòng để thực hiện kiểm tra mà chúng tôi muốn sử dụng:

command[check_postgres_locks]=/usr/local/nagios/libexec/check_postgres_locks -w 2 -c 3
command[check_postgres_bloat]=/usr/local/nagios/libexec/check_postgres_bloat -w='100 M' -c='200 M'
command[check_postgres_connection]=/usr/local/nagios/libexec/check_postgres_connection --db=postgres
command[check_postgres_backends]=/usr/local/nagios/libexec/check_postgres_backends -w=70 -c=100

Trong ví dụ của chúng tôi, chúng tôi đã thêm 4 kiểm tra cơ bản cho PostgreSQL. Chúng tôi sẽ giám sát các Khóa, Bloat, Kết nối và Phần bổ trợ.

Trong tệp tương ứng với cơ sở dữ liệu của chúng tôi trong máy chủ Nagios (/usr/local/nagios/etc/objects/postgres1.cfg), chúng tôi thêm các mục sau:

define service {
      use                    generic-service
      host_name              postgres1
      service_description    PostgreSQL locks
      check_command          check_nrpe!check_postgres_locks
}
define service {
      use                    generic-service
      host_name              postgres1
      service_description    PostgreSQL Bloat
      check_command          check_nrpe!check_postgres_bloat
}
define service {
      use                    generic-service
      host_name              postgres1
      service_description    PostgreSQL Connection
      check_command          check_nrpe!check_postgres_connection
}
define service {
      use                    generic-service
      host_name              postgres1
      service_description    PostgreSQL Backends
      check_command          check_nrpe!check_postgres_backends
}

Và sau khi khởi động lại cả hai dịch vụ (NRPE và Nagios) trên cả hai máy chủ, chúng tôi có thể thấy các cảnh báo của mình đã được định cấu hình.

Nagios check_postgres Alerts

Trong tài liệu chính thức của plugin check_postgres, bạn có thể tìm thấy thông tin về những thứ khác cần theo dõi và cách thực hiện.

Check_pgactivity

Bây giờ đến lượt check_pgactivity, cũng phổ biến để theo dõi cơ sở dữ liệu PostgreSQL của chúng tôi.

Cài đặt

[[email protected] ~]# wget https://github.com/OPMDG/check_pgactivity/releases/download/REL2_3/check_pgactivity-2.3.tgz
[[email protected] ~]# tar zxvf check_pgactivity-2.3.tgz
[[email protected] ~]# cp check_pgactivity-2.3check_pgactivity /usr/local/nagios/libexec/check_pgactivity
[[email protected] ~]# chown nagios.nagios /usr/local/nagios/libexec/check_pgactivity

Chúng tôi thêm vào tệp cấu hình NRPE của mình (/usr/local/nagios/etc/nrpe.cfg) dòng để thực hiện kiểm tra mà chúng tôi muốn sử dụng:

command[check_pgactivity_backends]=/usr/local/nagios/libexec/check_pgactivity -h localhost -s backends -w 70 -c 100
command[check_pgactivity_connection]=/usr/local/nagios/libexec/check_pgactivity -h localhost -s connection
command[check_pgactivity_indexes]=/usr/local/nagios/libexec/check_pgactivity -h localhost -s invalid_indexes
command[check_pgactivity_locks]=/usr/local/nagios/libexec/check_pgactivity -h localhost -s locks -w 5 -c 10

Trong ví dụ của chúng tôi, chúng tôi sẽ thêm 4 kiểm tra cơ bản cho PostgreSQL. Chúng tôi sẽ theo dõi Phần phụ trợ, Kết nối, Chỉ mục Không hợp lệ và các khóa.

Trong tệp tương ứng với cơ sở dữ liệu của chúng tôi trong máy chủ Nagios (/usr/local/nagios/etc/objects/postgres2.cfg), chúng tôi thêm các mục sau:

define service {
    use                     generic-service           ; Name of service template to use
    host_name               postgres2
    service_description     PGActivity Backends
    check_command           check_nrpe!check_pgactivity_backends
}
define service {
    use                     generic-service           ; Name of service template to use
    host_name               postgres2
    service_description     PGActivity Connection
    check_command           check_nrpe!check_pgactivity_connection
}
define service {
    use                     generic-service           ; Name of service template to use
    host_name               postgres2
    service_description     PGActivity Indexes
    check_command           check_nrpe!check_pgactivity_indexes
}
define service {
    use                     generic-service           ; Name of service template to use
    host_name               postgres2
    service_description     PGActivity Locks
    check_command           check_nrpe!check_pgactivity_locks
}

Và sau khi khởi động lại cả hai dịch vụ (NRPE và Nagios) trên cả hai máy chủ, chúng tôi có thể thấy các cảnh báo của mình đã được định cấu hình.

Nagios check_pgactivity Alerts

Kiểm tra nhật ký lỗi

Một trong những kiểm tra quan trọng nhất, hoặc kiểm tra quan trọng nhất, là kiểm tra nhật ký lỗi của chúng tôi.

Tại đây, chúng tôi có thể tìm thấy các loại lỗi khác nhau như FATAL hoặc deadlock và đó là điểm khởi đầu tốt để phân tích bất kỳ vấn đề nào chúng tôi gặp phải trong cơ sở dữ liệu của mình.

Để kiểm tra nhật ký lỗi của chúng tôi, chúng tôi sẽ tạo tập lệnh giám sát của riêng mình và tích hợp nó vào Nagios của chúng tôi (đây chỉ là một ví dụ, tập lệnh này sẽ là cơ bản và còn nhiều chỗ để cải thiện).

Tập lệnh

Chúng tôi sẽ tạo tệp /usr/local/nagios/libexec/check_postgres_log.sh trên máy chủ PostgreSQL3 của chúng tôi.

[[email protected] ~]# vi /usr/local/nagios/libexec/check_postgres_log.sh
#!/bin/bash
#Variables
LOG="/var/log/postgresql-$(date +%a).log"
CURRENT_DATE=$(date +'%Y-%m-%d %H')
ERROR=$(grep "$CURRENT_DATE" $LOG | grep "FATAL" | wc -l)
#States
STATE_CRITICAL=2
STATE_OK=0
#Check
if [ $ERROR -ne 0 ]; then
       echo "CRITICAL - Check PostgreSQL Log File - $ERROR Error Found"
       exit $STATE_CRITICAL
else
       echo "OK - PostgreSQL without errors"
       exit $STATE_OK
fi

Điều quan trọng của script là tạo chính xác các đầu ra tương ứng với từng trạng thái. Các kết quả đầu ra này được đọc bởi Nagios và mỗi số tương ứng với một trạng thái:

0=OK
1=WARNING
2=CRITICAL
3=UNKNOWN

Trong ví dụ của chúng tôi, chúng tôi sẽ chỉ sử dụng 2 trạng thái, OK và CRITICAL, vì chúng tôi chỉ quan tâm đến việc biết liệu có lỗi thuộc loại FATAL trong nhật ký lỗi của chúng tôi trong giờ hiện tại hay không.

Văn bản mà chúng tôi sử dụng trước khi thoát sẽ được hiển thị trên giao diện web của Nagios, vì vậy càng phải rõ ràng càng tốt khi sử dụng văn bản này làm hướng dẫn cho vấn đề.

Khi chúng tôi đã hoàn thành tập lệnh giám sát của mình, chúng tôi sẽ tiến hành cấp cho nó quyền thực thi, gán nó cho nagios người dùng và thêm nó vào máy chủ cơ sở dữ liệu NRPE cũng như Nagios của chúng tôi:

[[email protected] ~]# chmod +x /usr/local/nagios/libexec/check_postgres_log.sh
[[email protected] ~]# chown nagios.nagios /usr/local/nagios/libexec/check_postgres_log.sh

[[email protected] ~]# vi /usr/local/nagios/etc/nrpe.cfg
command[check_postgres_log]=/usr/local/nagios/libexec/check_postgres_log.sh

[[email protected] ~]# vi /usr/local/nagios/etc/objects/postgres3.cfg
define service {
    use                     generic-service           ; Name of service template to use
    host_name               postgres3
    service_description     PostgreSQL LOG
    check_command           check_nrpe!check_postgres_log
}

Khởi động lại NRPE và Nagios. Sau đó, chúng tôi có thể thấy kiểm tra của chúng tôi trong giao diện Nagios:

Cảnh báo tập lệnh Nagios

Như chúng ta có thể thấy, nó đang ở trạng thái CRITICAL, vì vậy nếu chúng ta truy cập nhật ký, chúng ta có thể thấy như sau:

2018-08-30 02:29:49.531 UTC [22162] FATAL:  Peer authentication failed for user "postgres"
2018-08-30 02:29:49.531 UTC [22162] DETAIL:  Connection matched pg_hba.conf line 83: "local   all             all                                     peer"

Để biết thêm thông tin về những gì chúng tôi có thể giám sát trong cơ sở dữ liệu PostgreSQL của mình, tôi khuyên bạn nên kiểm tra hiệu suất và các blog giám sát của chúng tôi hoặc hội thảo trên web về Hiệu suất Postgres này.

An toàn và Hiệu suất

Khi định cấu hình bất kỳ giám sát nào, bằng cách sử dụng plugin hoặc tập lệnh của riêng chúng tôi, chúng tôi phải rất cẩn thận với 2 điều rất quan trọng - an toàn và hiệu suất.

Khi chúng tôi chỉ định các quyền cần thiết để giám sát, chúng tôi phải hạn chế hết mức có thể, chỉ giới hạn truy cập cục bộ hoặc từ máy chủ giám sát của chúng tôi, sử dụng khóa an toàn, mã hóa lưu lượng, cho phép kết nối ở mức tối thiểu cần thiết để giám sát hoạt động.

Đối với hiệu suất, việc giám sát là cần thiết, nhưng cũng cần phải sử dụng nó một cách an toàn cho hệ thống của chúng tôi.

Chúng tôi phải cẩn thận để không tạo ra quyền truy cập đĩa cao bất hợp lý hoặc chạy các truy vấn ảnh hưởng tiêu cực đến hiệu suất của cơ sở dữ liệu của chúng tôi.

Nếu chúng ta có nhiều giao dịch mỗi giây tạo ra hàng gigabyte nhật ký và chúng ta liên tục tìm kiếm lỗi, thì đó có lẽ không phải là cách tốt nhất cho cơ sở dữ liệu của chúng ta. Vì vậy, chúng tôi phải giữ cân bằng giữa những gì chúng tôi theo dõi, tần suất và tác động đến hiệu suất.

Kết luận

Có nhiều cách để triển khai giám sát hoặc cấu hình nó. Chúng tôi có thể làm điều đó phức tạp hoặc đơn giản tùy ý. Mục tiêu của blog này là giới thiệu cho bạn cách giám sát PostgreSQL bằng cách sử dụng một trong những công cụ mã nguồn mở được sử dụng nhiều nhất. Chúng tôi cũng nhận thấy rằng cấu hình này rất linh hoạt và có thể được điều chỉnh theo các nhu cầu khác nhau.

Và đừng quên rằng chúng ta luôn có thể dựa vào cộng đồng, vì vậy tôi để lại một số liên kết có thể giúp ích rất nhiều.

Diễn đàn hỗ trợ:https://support.nagios.com/forum/

Các vấn đề đã biết:https://github.com/NagiosEnterranty/nagioscore/issues

Nagios Plugins:https://exchange.nagios.org/directory/Plugins

Plugin Nagios cho ClusterControl:https://severalnines.com/blog/nagios-plugin-clustercontrol


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để sử dụng toán tử% từ phần mở rộng pg_trgm?

  2. Truy vấn cho phần tử của mảng trong cột JSON

  3. Quản lý tính khả dụng cao trong PostgreSQL - Phần III:Patroni

  4. Thiết kế cơ sở dữ liệu để tạo bảng một cách nhanh chóng

  5. Các tiện ích mở rộng PostgreSQL yêu thích của tôi - Phần thứ hai