Cách phân tích thống kê database PostgreSQL được quản lý bằng elastic trên Ubuntu 18.04
Giám sát database là quá trình liên tục theo dõi một cách có hệ thống các số liệu khác nhau cho thấy database đang hoạt động như thế nào. Bằng cách quan sát dữ liệu hiệu suất, bạn có thể có được những thông tin chi tiết có giá trị và xác định các điểm nghẽn có thể xảy ra, cũng như tìm ra các cách bổ sung để cải thiện hiệu suất database . Các hệ thống như vậy thường triển khai cảnh báo, thông báo cho administrator khi có sự cố. Số liệu thống kê đã thu thập được dùng để không chỉ cải thiện cấu hình và quy trình làm việc của database mà còn của các ứng dụng client .Lợi ích của việc sử dụng ngăn xếp elastic (ngăn xếp ELK) để theo dõi database được quản lý của bạn là hỗ trợ tuyệt vời cho việc tìm kiếm và khả năng nhập dữ liệu mới rất nhanh chóng. Nó không xuất sắc trong việc cập nhật dữ liệu, nhưng sự đánh đổi này có thể chấp nhận được cho các mục đích theo dõi và ghi log , nơi dữ liệu trong quá khứ hầu như không bao giờ thay đổi. Elasticsearch cung cấp các phương tiện truy vấn dữ liệu mạnh mẽ mà bạn có thể sử dụng thông qua Kibana để hiểu rõ hơn về cách database hoạt động qua các khoảng thời gian khác nhau. Điều này sẽ cho phép bạn tương quan tải database với các sự kiện trong đời thực để hiểu sâu hơn về cách database đang được sử dụng.
Trong hướng dẫn này, bạn sẽ nhập các chỉ số database , được tạo bởi bộ thu thập thống kê PostgreSQL , vào Elasticsearch thông qua Logstash . Điều này đòi hỏi phải cấu hình Logstash để lấy dữ liệu từ database bằng cách sử dụng trình kết nối PostgreSQL JDBC để gửi nó đến Elasticsearch để lập index ngay sau đó. Dữ liệu đã nhập sau đó có thể được phân tích và hiển thị trong Kibana. Sau đó, nếu database của bạn là thương hiệu mới, bạn sẽ sử dụng pgbench , một công cụ đo điểm chuẩn của PostgreSQL, để tạo ra nhiều hình ảnh trực quan thú vị hơn. Cuối cùng, bạn sẽ có một hệ thống tự động lấy số liệu thống kê PostgreSQL để phân tích sau này.
Yêu cầu
Server Ubuntu 18.04 có RAM ít nhất 4 GB, quyền root và account phụ, không phải root. Bạn có thể cài đặt điều này theo hướng dẫn cài đặt server ban đầu này . Đối với hướng dẫn này, user không phải root là
sammy
.Java 8 được cài đặt trên server của bạn. Để biết hướng dẫn cài đặt, hãy truy cập Cách cài đặt Java với
apt
trên Ubuntu 18.04 .Nginx được cài đặt trên server của bạn. Để biết hướng dẫn về cách thực hiện điều đó, hãy xem Cách cài đặt Nginx trên Ubuntu 18.04 .
Đã cài đặt Elasticsearch và Kibana trên server của bạn. Hoàn thành hai bước đầu tiên của hướng dẫn Cách cài đặt Elasticsearch, Logstash và Kibana (Elastic Stack) trên Ubuntu 18.04 .
Dịch vụdatabase PostgreSQL được cung cấp từ DigitalOcean với thông tin kết nối có sẵn. Đảm bảo rằng địa chỉ IP của server của bạn có trong danh sách trắng. Để tìm hiểu thêm về Dịch vụdatabase DigitalOcean, hãy truy cập tài liệu sản phẩm .
Bước 1 - Cài đặt Logstash và Trình điều khiển PostgreSQL JDBC
Trong phần này, bạn sẽ cài đặt Logstash và download trình điều khiển PostgreSQL JDBC để Logstash có thể kết nối với database được quản lý của bạn.
Bắt đầu bằng cách cài đặt Logstash bằng lệnh sau:
- sudo apt install logstash -y
Sau khi cài đặt Logstash, hãy kích hoạt dịch vụ để tự động khởi động khi server khởi động :
- sudo systemctl enable logstash
Logstash được viết bằng Java, vì vậy để kết nối với PostgreSQL, nó yêu cầu thư viện PostgreSQL JDBC (Java Database Connectivity) có sẵn trên hệ thống mà nó đang chạy. Do giới hạn nội bộ, Logstash sẽ chỉ tải thư viện đúng cách nếu nó được tìm thấy trong folder /usr/share/logstash/logstash-core/lib/jars
, nơi nó lưu trữ các thư viện của bên thứ ba mà nó sử dụng.
Truy cập trang download của thư viện JDBC và sao chép liên kết sang version mới nhất. Sau đó, download bằng curl
bằng cách chạy lệnh sau:
- sudo curl https://jdbc.postgresql.org/download/postgresql-42.2.6.jar -o /usr/share/logstash/logstash-core/lib/jars/postgresql-jdbc.jar
Tại thời điểm viết bài, version mới nhất của thư viện là 42.2.6
, với Java 8 là version thời gian chạy được hỗ trợ. Đảm bảo bạn download version mới nhất; ghép nối nó với version Java chính xác mà cả JDBC và Logstash đều hỗ trợ.
Logstash lưu trữ các file cấu hình của nó trong /etc/logstash/conf.d
và chính nó được lưu trong /usr/share/logstash/bin
. Trước khi bạn tạo cấu hình sẽ lấy thống kê từ database của bạn , bạn cần bật plugin JDBC trong Logstash bằng cách chạy lệnh sau:
- sudo /usr/share/logstash/bin/logstash-plugin install logstash-input-jdbc
Bạn đã cài đặt Logstash bằng apt
và download thư viện PostgreSQL JDBC để Logstash có thể sử dụng nó để kết nối với database được quản lý của bạn. Trong bước tiếp theo, bạn sẽ cấu hình Logstash để lấy dữ liệu thống kê từ nó.
Bước 2 - Cấu hình Logstash để kéo số liệu thống kê
Trong phần này, bạn sẽ cấu hình Logstash để lấy số liệu từ database PostgreSQL được quản lý của bạn.
Bạn sẽ cấu hình Logstash để theo dõi ba database hệ thống trong PostgreSQL, đó là:
-
pg_stat_database
: cung cấp số liệu thống kê về mỗi database , bao gồm tên, số lượng kết nối, giao dịch, khôi phục dữ liệu, các hàng được trả về bằng cách truy vấn database , deadlock, v.v. Nó có trườngstats_reset
, chỉ định thời điểm thống kê được đặt lại lần cuối. -
pg_stat_user_tables
: cung cấp số liệu thống kê về mỗi bảng do user tạo ra, chẳng hạn như số lượng hàng được chèn, xóa và cập nhật. -
pg_stat_user_indexes
: thu thập dữ liệu về tất cả các index trong bảng do user tạo, chẳng hạn như số lần một index cụ thể đã được quét.
Bạn sẽ lưu trữ cấu hình để lập index thống kê PostgreSQL trong Elasticsearch trong một file có tên postgresql.conf
trong folder /etc/logstash/conf.d
, nơi Logstash lưu trữ các file cấu hình. Khi bắt đầu dưới dạng một dịch vụ, nó sẽ tự động chạy chúng trong nền.
Tạo postgresql.conf
bằng editor yêu thích của bạn (ví dụ: nano):
- sudo nano /etc/logstash/conf.d/postgresql.conf
Thêm các dòng sau:
input { # pg_stat_database jdbc { jdbc_driver_library => "" jdbc_driver_class => "org.postgresql.Driver" jdbc_connection_string => "jdbc:postgresql://host:port/defaultdb" jdbc_user => "username" jdbc_password => "password" statement => "SELECT * FROM pg_stat_database" schedule => "* * * * *" type => "pg_stat_database" } # pg_stat_user_tables jdbc { jdbc_driver_library => "" jdbc_driver_class => "org.postgresql.Driver" jdbc_connection_string => "jdbc:postgresql://host:port/defaultdb" jdbc_user => "username" jdbc_password => "password" statement => "SELECT * FROM pg_stat_user_tables" schedule => "* * * * *" type => "pg_stat_user_tables" } # pg_stat_user_indexes jdbc { jdbc_driver_library => "" jdbc_driver_class => "org.postgresql.Driver" jdbc_connection_string => "jdbc:postgresql://host:port/defaultdb" jdbc_user => "username" jdbc_password => "password" statement => "SELECT * FROM pg_stat_user_indexes" schedule => "* * * * *" type => "pg_stat_user_indexes" } } output { elasticsearch { hosts => "http://localhost:9200" index => "%{type}" } }
Hãy nhớ thay thế host
bằng địa chỉ server của bạn, port
với cổng mà bạn có thể kết nối với database của bạn , username
với username
database và password
bằng password của nó. Tất cả các giá trị này có thể được tìm thấy trong Control panel của database được quản lý của bạn.
Trong cấu hình này, bạn xác định ba đầu vào JDBC và một kết quả Elasticsearch. Ba đầu vào lấy dữ liệu từ database pg_stat_database
, pg_stat_user_tables
và pg_stat_user_indexes
, tương ứng. Tất cả đều đặt tham số jdbc_driver_library
thành một chuỗi trống, vì thư viện PostgreSQL JDBC nằm trong một folder mà Logstash tự động tải.
Sau đó, họ đặt jdbc_driver_class
, có giá trị dành riêng cho thư viện JDBC và cung cấp jdbc_connection_string
, cung cấp chi tiết cách kết nối với database . Phần jdbc:
biểu thị rằng nó là một kết nối JDBC, trong khi postgres://
cho biết database đích là PostgreSQL. Tiếp theo là server và cổng của database , và sau dấu gạch chéo lên, bạn cũng chỉ định một database để kết nối; điều này là do PostgreSQL yêu cầu bạn phải kết nối với database để có thể đưa ra bất kỳ truy vấn nào. Ở đây, nó được đặt thành database mặc định luôn tồn tại và không thể bị xóa, có tên là defaultdb
.
Tiếp theo, họ đặt tên user và password của user mà thông qua đó, database sẽ được truy cập. Tham số statement
chứa một truy vấn SQL sẽ trả về dữ liệu bạn muốn xử lý — trong cấu hình này, nó chọn tất cả các hàng từ database thích hợp.
Tham số schedule
chấp nhận một chuỗi trong cú pháp cron xác định thời điểm Logstash chạy đầu vào này; Việc bỏ qua nó hoàn toàn sẽ khiến Logstash chỉ chạy nó một lần. Chỉ định * * * * *
, như bạn đã làm ở đây, sẽ yêu cầu Logstash chạy nó mỗi phút. Bạn có thể chỉ định chuỗi cron của riêng mình nếu bạn muốn thu thập dữ liệu ở các khoảng thời gian khác nhau.
Chỉ có một kết quả , chấp nhận dữ liệu từ ba đầu vào. Tất cả đều gửi dữ liệu đến Elasticsearch, đang chạy local và có thể truy cập được tại http://localhost:9200
. Tham index
xác định index Elasticsearch mà nó sẽ gửi dữ liệu đến và giá trị của nó được chuyển vào từ trường type
của đầu vào.
Khi bạn hoàn tất việc chỉnh sửa, hãy lưu file .
Bạn đã cấu hình Logstash để thu thập dữ liệu từ các bảng thống kê PostgreSQL khác nhau và gửi chúng đến Elasticsearch để lưu trữ và lập index . Tiếp theo, bạn sẽ chạy Logstash để kiểm tra cấu hình.
Bước 3 - Kiểm tra cấu hình Logstash
Trong phần này, bạn sẽ kiểm tra cấu hình bằng cách chạy Logstash để xác minh nó sẽ kéo dữ liệu đúng cách. Sau đó, bạn sẽ làm cho cấu hình này chạy ở chế độ nền bằng cách cấu hình nó như một đường dẫn Logstash.
Logstash hỗ trợ chạy một cấu hình cụ thể bằng cách chuyển đường dẫn file của nó đến tham số -f
. Chạy lệnh sau để kiểm tra cấu hình mới của bạn từ bước cuối cùng:
- sudo /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/postgresql.conf
Có thể mất một khoảng thời gian trước khi nó hiển thị bất kỳ kết quả nào, trông giống như sau:
OutputThread.exclusive is deprecated, use Thread::Mutex WARNING: Could not find logstash.yml which is typically located in $LS_HOME/config or /etc/logstash. You can specify the path using --path.settings. Continuing using the defaults Could not find log4j2 configuration at path /usr/share/logstash/config/log4j2.properties. Using default config which logs errors to the console [WARN ] 2019-08-02 18:29:15.123 [LogStash::Runner] multilocal - Ignoring the 'pipelines.yml' file because modules or command line options are specified [INFO ] 2019-08-02 18:29:15.154 [LogStash::Runner] runner - Starting Logstash {"logstash.version"=>"7.3.0"} [INFO ] 2019-08-02 18:29:18.209 [Converge PipelineAction::Create<main>] Reflections - Reflections took 77 ms to scan 1 urls, producing 19 keys and 39 values [INFO ] 2019-08-02 18:29:20.195 [[main]-pipeline-manager] elasticsearch - Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://localhost:9200/]}} [WARN ] 2019-08-02 18:29:20.667 [[main]-pipeline-manager] elasticsearch - Restored connection to ES instance {:url=>"http://localhost:9200/"} [INFO ] 2019-08-02 18:29:21.221 [[main]-pipeline-manager] elasticsearch - ES Output version determined {:es_version=>7} [WARN ] 2019-08-02 18:29:21.230 [[main]-pipeline-manager] elasticsearch - Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=>7} [INFO ] 2019-08-02 18:29:21.274 [[main]-pipeline-manager] elasticsearch - New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["http://localhost:9200"]} [INFO ] 2019-08-02 18:29:21.337 [[main]-pipeline-manager] elasticsearch - Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://localhost:9200/]}} [WARN ] 2019-08-02 18:29:21.369 [[main]-pipeline-manager] elasticsearch - Restored connection to ES instance {:url=>"http://localhost:9200/"} [INFO ] 2019-08-02 18:29:21.386 [[main]-pipeline-manager] elasticsearch - ES Output version determined {:es_version=>7} [WARN ] 2019-08-02 18:29:21.386 [[main]-pipeline-manager] elasticsearch - Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=>7} [INFO ] 2019-08-02 18:29:21.409 [[main]-pipeline-manager] elasticsearch - New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["http://localhost:9200"]} [INFO ] 2019-08-02 18:29:21.430 [[main]-pipeline-manager] elasticsearch - Elasticsearch pool URLs updated {:changes=>{:removed=>[], :added=>[http://localhost:9200/]}} [WARN ] 2019-08-02 18:29:21.444 [[main]-pipeline-manager] elasticsearch - Restored connection to ES instance {:url=>"http://localhost:9200/"} [INFO ] 2019-08-02 18:29:21.465 [[main]-pipeline-manager] elasticsearch - ES Output version determined {:es_version=>7} [WARN ] 2019-08-02 18:29:21.466 [[main]-pipeline-manager] elasticsearch - Detected a 6.x and above cluster: the `type` event field won't be used to determine the document _type {:es_version=>7} [INFO ] 2019-08-02 18:29:21.468 [Ruby-0-Thread-7: :1] elasticsearch - Using default mapping template [INFO ] 2019-08-02 18:29:21.538 [Ruby-0-Thread-5: :1] elasticsearch - Using default mapping template [INFO ] 2019-08-02 18:29:21.545 [[main]-pipeline-manager] elasticsearch - New Elasticsearch output {:class=>"LogStash::Outputs::ElasticSearch", :hosts=>["http://localhost:9200"]} [INFO ] 2019-08-02 18:29:21.589 [Ruby-0-Thread-9: :1] elasticsearch - Using default mapping template [INFO ] 2019-08-02 18:29:21.696 [Ruby-0-Thread-5: :1] elasticsearch - Attempting to install template {:manage_template=>{"index_patterns"=>"logstash-*", "version"=>60001, "settings"=>{"index.refresh_interval"=>"5s", "number_of_shards"=>1}, "mappings"=>{"dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false}}}, {"string_fields"=>{"match"=>"*", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false, "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}], "properties"=>{"@timestamp"=>{"type"=>"date"}, "@version"=>{"type"=>"keyword"}, "geoip"=>{"dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip"}, "location"=>{"type"=>"geo_point"}, "latitude"=>{"type"=>"half_float"}, "longitude"=>{"type"=>"half_float"}}}}}}} [INFO ] 2019-08-02 18:29:21.769 [Ruby-0-Thread-7: :1] elasticsearch - Attempting to install template {:manage_template=>{"index_patterns"=>"logstash-*", "version"=>60001, "settings"=>{"index.refresh_interval"=>"5s", "number_of_shards"=>1}, "mappings"=>{"dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false}}}, {"string_fields"=>{"match"=>"*", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false, "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}], "properties"=>{"@timestamp"=>{"type"=>"date"}, "@version"=>{"type"=>"keyword"}, "geoip"=>{"dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip"}, "location"=>{"type"=>"geo_point"}, "latitude"=>{"type"=>"half_float"}, "longitude"=>{"type"=>"half_float"}}}}}}} [INFO ] 2019-08-02 18:29:21.771 [Ruby-0-Thread-9: :1] elasticsearch - Attempting to install template {:manage_template=>{"index_patterns"=>"logstash-*", "version"=>60001, "settings"=>{"index.refresh_interval"=>"5s", "number_of_shards"=>1}, "mappings"=>{"dynamic_templates"=>[{"message_field"=>{"path_match"=>"message", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false}}}, {"string_fields"=>{"match"=>"*", "match_mapping_type"=>"string", "mapping"=>{"type"=>"text", "norms"=>false, "fields"=>{"keyword"=>{"type"=>"keyword", "ignore_above"=>256}}}}}], "properties"=>{"@timestamp"=>{"type"=>"date"}, "@version"=>{"type"=>"keyword"}, "geoip"=>{"dynamic"=>true, "properties"=>{"ip"=>{"type"=>"ip"}, "location"=>{"type"=>"geo_point"}, "latitude"=>{"type"=>"half_float"}, "longitude"=>{"type"=>"half_float"}}}}}}} [WARN ] 2019-08-02 18:29:21.871 [[main]-pipeline-manager] LazyDelegatingGauge - A gauge metric of an unknown type (org.jruby.specialized.RubyArrayOneObject) has been create for key: cluster_uuids. This may result in invalid serialization. It is recommended to log an issue to the responsible developer/development team. [INFO ] 2019-08-02 18:29:21.878 [[main]-pipeline-manager] javapipeline - Starting pipeline {:pipeline_id=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50, "pipeline.max_inflight"=>125, :thread=>"#<Thread:0x470bf1ca run>"} [INFO ] 2019-08-02 18:29:22.351 [[main]-pipeline-manager] javapipeline - Pipeline started {"pipeline.id"=>"main"} [INFO ] 2019-08-02 18:29:22.721 [Ruby-0-Thread-1: /usr/share/logstash/lib/bootstrap/environment.rb:6] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]} [INFO ] 2019-08-02 18:29:23.798 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600} /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/cronline.rb:77: warning: constant ::Fixnum is deprecated /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/cronline.rb:77: warning: constant ::Fixnum is deprecated /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/cronline.rb:77: warning: constant ::Fixnum is deprecated [INFO ] 2019-08-02 18:30:02.333 [Ruby-0-Thread-22: /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/jobs.rb:284] jdbc - (0.042932s) SELECT * FROM pg_stat_user_indexes [INFO ] 2019-08-02 18:30:02.340 [Ruby-0-Thread-23: /usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/rufus-scheduler-3.0.9/lib/rufus/scheduler/jobs.rb:331] jdbc - (0.043178s) SELECT * FROM pg_stat_user_tables [INFO ] 2019-08-02 18:30:02.340 [Ruby-0-Thread-24: :1] jdbc - (0.036469s) SELECT * FROM pg_stat_database ...
Nếu Logstash không hiển thị bất kỳ lỗi nào và log cho thấy nó đã SELECT
thành công các hàng ed từ ba database , thì số liệu database của bạn sẽ được chuyển đến Elasticsearch. Nếu bạn gặp lỗi, hãy kiểm tra kỹ tất cả các giá trị trong file cấu hình đảm bảo rằng máy bạn đang chạy Logstash có thể kết nối với database được quản lý.
Logstash sẽ tiếp tục nhập dữ liệu vào những thời điểm cụ thể. Bạn có thể dừng nó một cách an toàn bằng cách nhấn CTRL+C
Như đã đề cập trước đây, khi được khởi động dưới dạng một dịch vụ, Logstash sẽ tự động chạy tất cả các file cấu hình mà nó tìm thấy trong /etc/logstash/conf.d
trong nền. Chạy lệnh sau để bắt đầu nó như một dịch vụ:
- sudo systemctl start logstash
Trong bước này, bạn đã chạy Logstash để kiểm tra xem nó có thể kết nối với database của bạn và thu thập dữ liệu hay không. Tiếp theo, bạn sẽ hình dung và khám phá một số dữ liệu thống kê trong Kibana.
Bước 4 - Khám phá dữ liệu đã nhập trong Kibana
Trong phần này, bạn sẽ thấy cách bạn có thể khám phá dữ liệu thống kê mô tả hiệu suất database của bạn trong Kibana.
Trong trình duyệt của bạn, chuyển đến cài đặt Kibana mà bạn cài đặt làm yêu cầu . Bạn sẽ thấy trang chào mừng mặc định.
Để tương tác với các index Elasticsearch trong Kibana, bạn cần tạo một mẫu index . Các mẫu index chỉ định Kibana index nào nên hoạt động. Để tạo một biểu tượng, hãy nhấn vào biểu tượng cuối cùng (cờ lê) từ thanh bên dọc bên trái để mở trang Quản lý . Sau đó, từ menu bên trái, nhấn vào Mẫu index trong Kibana . Bạn sẽ thấy một hộp thoại để tạo một mẫu index .
Được liệt kê là ba index mà Logstash đã gửi số liệu thống kê. pg_stat_database
vào hộp nhập Mẫu index , sau đó nhấn Bước tiếp theo . Bạn cần chọn trường lưu trữ thời gian, vì vậy, sau này bạn có thể thu hẹp dữ liệu của bạn theo một khoảng thời gian. Từ menu thả xuống, chọn @timestamp
.
Nhấn vào Tạo mẫu index để hoàn tất việc tạo mẫu index . Đến đây bạn sẽ có thể khám phá nó bằng Kibana. Để tạo hình ảnh trực quan, hãy nhấn vào biểu tượng thứ hai trong thanh bên, sau đó bấm vào Tạo hình ảnh trực quan mới . Chọn Trực quan hóa dòng khi biểu mẫu bật lên, rồi chọn mẫu index bạn vừa tạo ( pg_stat_database
). Bạn sẽ thấy một hình ảnh trống rỗng.
Ở phần trung tâm của màn hình là biểu đồ kết quả — console bên trái điều chỉnh thế hệ của nó mà từ đó bạn có thể đặt dữ liệu cho trục X và Y. Ở phía trên bên phải của màn hình là bộ chọn phạm vi ngày. Trừ khi bạn chọn cụ thể một phạm vi khác khi cấu hình dữ liệu, phạm vi đó sẽ được hiển thị trên biểu đồ.
Đến đây bạn sẽ hình dung số lượng bộ dữ liệu trung bình INSERT
ed vào các phút trong repository ảng thời gian nhất định. Nhấn vào Trục Y bên dưới Chỉ số trong console bên trái để mở nó ra. Chọn Trung bình làm Tổng hợp và chọn tup_inserted
làm Trường . Điều này sẽ điền vào trục Y của biểu đồ với các giá trị trung bình.
Tiếp theo, nhấn vào X-Axis trong Buckets . Đối với Tổng hợp , hãy chọn Biểu đồ Ngày . @timestamp
sẽ được tự động chọn làm Trường . Sau đó, nhấn vào nút phát màu xanh lam trên đầu bảng để tạo biểu đồ của bạn. Nếu database của bạn là thương hiệu mới và chưa được sử dụng, bạn sẽ không thấy gì cả. Tuy nhiên, trong mọi trường hợp, bạn sẽ thấy mô tả chính xác về việc sử dụng database .
Kibana hỗ trợ nhiều hình thức trực quan khác — bạn có thể khám phá các hình thức khác trong tài liệu Kibana . Bạn cũng có thể thêm hai index còn lại, được đề cập ở Bước 2, vào Kibana để có thể hình dung chúng.
Trong bước này, bạn đã học cách trực quan hóa một số dữ liệu thống kê PostgreSQL, sử dụng Kibana.
Bước 5 - (Tùy chọn) Đo điểm chuẩn bằng pgbench
Nếu bạn chưa làm việc trong database của bạn ngoài hướng dẫn này, bạn có thể hoàn thành bước này để tạo các hình ảnh trực quan thú vị hơn bằng cách sử dụng pgbench để đánh giá database của bạn. pgbench sẽ chạy lặp đi lặp lại các lệnh SQL giống nhau, mô phỏng việc sử dụng database trong thế giới thực bởi một client thực tế.
Trước tiên, bạn cần cài đặt pgbench bằng cách chạy lệnh sau:
- sudo apt install postgresql-contrib -y
Vì pgbench sẽ chèn và cập nhật dữ liệu thử nghiệm, bạn cần tạo một database riêng cho nó. Để làm như vậy, hãy chuyển đến tab User & Database trong Control panel của database được quản lý của bạn và cuộn xuống phần Database . pgbench
làm tên của database mới, sau đó nhấn Lưu . Bạn sẽ chuyển tên này, cũng như thông tin server , cổng và tên user cho pgbench.
Trước khi thực sự chạy pgbench
, bạn cần chạy nó với cờ -i
để khởi tạo database của nó:
- pgbench -h host -p port -U username -i pgbench
Bạn cần thay thế host
bằng địa chỉ server lưu trữ của bạn , port
bằng cổng mà bạn có thể kết nối với database của bạn và username
với username
database . Bạn có thể tìm thấy tất cả các giá trị này trong Control panel của database được quản lý của bạn .
Lưu ý pgbench
không có đối số password ; thay vào đó, bạn cần mỗi khi bạn chạy nó.
Đầu ra sẽ giống như sau:
OutputNOTICE: table "pgbench_history" does not exist, skipping NOTICE: table "pgbench_tellers" does not exist, skipping NOTICE: table "pgbench_accounts" does not exist, skipping NOTICE: table "pgbench_branches" does not exist, skipping creating tables... 100000 of 100000 tuples (100%) done (elapsed 0.16 s, remaining 0.00 s) vacuum... set primary keys... done.
pgbench
đã tạo bốn bảng, nó sẽ sử dụng để đo điểm chuẩn và điền chúng bằng một số hàng mẫu. Đến đây bạn sẽ có thể chạy các điểm chuẩn.
Hai đối số quan trọng nhất giới hạn thời gian điểm chuẩn sẽ chạy là -t
, chỉ định số lượng giao dịch cần hoàn thành và -T
, xác định thời gian điểm chuẩn sẽ chạy trong bao lâu. Hai tùy chọn này loại trừ lẫn nhau. Vào cuối mỗi điểm chuẩn, bạn sẽ nhận được thống kê, chẳng hạn như số lượng giao dịch mỗi giây ( tps
).
Bây giờ, hãy bắt đầu một điểm chuẩn sẽ kéo dài trong 30 giây bằng cách chạy lệnh sau:
- pgbench -h host -p port -U username pgbench -T 30
Đầu ra sẽ giống như sau:
Outputstarting vacuum...end. transaction type: <builtin: TPC-B (sort of)> scaling factor: 1 query mode: simple number of clients: 1 number of threads: 1 duration: 30 s number of transactions actually processed: 7602 latency average = 3.947 ms tps = 253.382298 (including connections establishing) tps = 253.535257 (excluding connections establishing)
Trong kết quả này, bạn sẽ thấy thông tin chung về điểm chuẩn, chẳng hạn như tổng số giao dịch được thực hiện. Hiệu quả của những điểm chuẩn này là số liệu thống kê mà Logstash gửi đến Elasticsearch sẽ phản ánh con số đó, do đó sẽ làm cho hình ảnh hóa trong Kibana thú vị hơn và gần với đồ thị trong thế giới thực hơn. Bạn có thể chạy lệnh trước đó một vài lần nữa và có thể thay đổi thời lượng.
Khi bạn hoàn tất, hãy đến Kibana và nhấn vào Làm mới ở góc trên bên phải. Đến đây bạn sẽ thấy một dòng khác so với trước đây, hiển thị số INSERT
. Vui lòng thay đổi phạm vi thời gian của dữ liệu được hiển thị bằng cách thay đổi các giá trị trong bộ chọn được đặt phía trên nút làm mới. Đây là cách biểu đồ có thể trông như thế nào sau nhiều điểm chuẩn với thời lượng khác nhau:
Bạn đã sử dụng pgbench để đánh giá database của bạn và đánh giá các biểu đồ kết quả trong Kibana.
Kết luận
Đến đây bạn đã cài đặt ngăn xếp Đàn hồi trên server của bạn và được cấu hình để lấy dữ liệu thống kê từ database PostgreSQL được quản lý của bạn một cách thường xuyên. Bạn có thể phân tích và trực quan hóa dữ liệu bằng Kibana hoặc một số phần mềm phù hợp khác, điều này sẽ giúp bạn thu thập thông tin chi tiết có giá trị và mối tương quan trong thế giới thực về cách database của bạn đang hoạt động.
Để biết thêm thông tin về những gì bạn có thể làm với Dịch vụdatabase PostgreSQL của bạn , hãy truy cập tài liệu sản phẩm .
Các tin liên quan
Cách sử dụng PostgreSQL với ứng dụng Ruby on Rails của bạn trên macOS2019-07-30
Cách sử dụng PostgreSQL với ứng dụng Ruby on Rails của bạn trên Ubuntu 18.04
2019-06-28
Cách kiểm tra database PostgreSQL với InSpec trên Ubuntu 18.04
2019-04-02
Công cụ kết nối dịch vụ database và đo điểm chuẩn PostgreSQL bằng pgbench
2019-02-14
Giới thiệu về Truy vấn trong PostgreSQL
2018-10-17
Cách thiết lập bản sao lôgic với PostgreSQL 10 trên Ubuntu 18.04
2018-08-31
Cách di chuyển thư mục dữ liệu PostgreSQL đến vị trí mới trên Ubuntu 18.04
2018-07-13
Cách cài đặt và sử dụng PostgreSQL trên Ubuntu 18.04
2018-05-04
Cách sử dụng tìm kiếm toàn văn bản trong PostgreSQL trên Ubuntu 16.04
2017-06-15
Cách bảo mật PostgreSQL chống lại các cuộc tấn công tự động
2017-01-24