Cách tập trung log với Rsyslog, Logstash và Elasticsearch trên Ubuntu 14.04
Hiểu được hàng triệu dòng log mà tổ chức của bạn tạo ra có thể là một thách thức khó khăn. Mặt khác, các dòng log này cung cấp cái nhìn về hiệu suất ứng dụng, số liệu hiệu suất server và bảo mật. Mặt khác, việc quản lý và phân tích log có thể rất tốn thời gian, điều này có thể cản trở việc áp dụng các dịch vụ ngày càng cần thiết này.Một bài báo từ Elastic
Phần mềm open-souce , chẳng hạn như rsyslog , Elasticsearch và Logstash cung cấp các công cụ để truyền, chuyển đổi và lưu trữ dữ liệu log của bạn.
Trong hướng dẫn này, bạn sẽ học cách tạo một server rsyslog tập trung để lưu trữ các file log từ nhiều hệ thống và sau đó sử dụng Logstash để gửi chúng đến một server Elasticsearch. Từ đó, bạn có thể quyết định cách tốt nhất để phân tích dữ liệu.
Bàn thắng
Hướng dẫn này dạy bạn cách tập trung các log được tạo hoặc nhận bởi syslog, cụ thể là biến thể được gọi là rsyslog . Syslog và các công cụ dựa trên log hệ thống như rsyslog, thu thập thông tin quan trọng từ kernel và nhiều chương trình chạy để giữ cho các server giống UNIX hoạt động. Vì log hệ thống là một tiêu chuẩn, và không chỉ là một chương trình, nhiều dự án phần mềm hỗ trợ việc gửi dữ liệu đến log hệ thống. Bằng cách tập trung dữ liệu này, bạn có thể dễ dàng kiểm tra bảo mật, giám sát hành vi ứng dụng và theo dõi các thông tin server quan trọng khác.
Từ một server rsyslog tập trung hoặc tổng hợp, sau đó bạn có thể chuyển tiếp dữ liệu tới Logstash, có thể phân tích cú pháp thêm và làm phong phú thêm dữ liệu log của bạn trước khi gửi đến Elasticsearch.
Mục tiêu cuối cùng của hướng dẫn này là:
- Cài đặt một server rsyslog đơn, khách (hoặc chuyển tiếp)
- Cài đặt một server duy nhất, server (hoặc thu thập) server rsyslog, để nhận log từ client rsyslog
- Cài đặt version Logstash để nhận thông báo từ server thu thập rsyslog
- Cài đặt server Elasticsearch để nhận dữ liệu từ Logstash
Yêu cầu
Trong cùng một trung tâm dữ liệu DigitalOcean , hãy tạo các Server sau khi bật mạng riêng tư :
- Ubuntu 14.04 Server có tên rsyslog-client
- Ubuntu 14.04 Server ( 1 GB trở lên) có tên là rsyslog-server , nơi các bản ghi tập trung sẽ được lưu trữ và Logstash sẽ được cài đặt
- Ubuntu 14.04 Server với Elasticsearch được cài đặt từ Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 14.04
Bạn cũng cần một user không phải root với các quyền sudo cho mỗi server này. Cài đặt server ban đầu với Ubuntu 14.04 giải thích cách cài đặt điều này.
Lưu ý: Để tối đa hóa hiệu suất, Logstash sẽ cố gắng cấp phát 1 gigabyte bộ nhớ theo mặc định, vì vậy hãy đảm bảo version server tập trung có kích thước phù hợp.
Tham khảo Cách cài đặt và sử dụng mạng riêng DigitalOcean để được trợ giúp về cách bật mạng riêng trong khi tạo các server .
Nếu bạn đã tạo Server mà không có mạng riêng, hãy tham khảo Cách bật mạng riêng DigitalOcean trên Server hiện có .
Bước 1 - Xác định địa chỉ IP riêng
Trong phần này, bạn sẽ xác định các địa chỉ IP riêng tư nào được gán cho mỗi server . Thông tin này cần thiết thông qua hướng dẫn.
Trên mỗi Server, tìm địa chỉ IP của nó bằng lệnh ifconfig
:
- sudo ifconfig -a
Tùy chọn -a
được sử dụng để hiển thị tất cả các giao diện. Giao diện Ethernet chính thường được gọi là eth0
. Tuy nhiên, trong trường hợp này, ta muốn IP từ eth1
, địa chỉ IP riêng . Các địa chỉ IP riêng này không thể định tuyến qua Internet và được sử dụng để giao tiếp trong các mạng LAN riêng - trong trường hợp này là giữa các server trong cùng một trung tâm dữ liệu qua các giao diện phụ.
Đầu ra sẽ tương tự như:
eth0 Link encap:Ethernet HWaddr 04:01:06:a7:6f:01 inet addr:123.456.78.90 Bcast:123.456.78.255 Mask:255.255.255.0 inet6 addr: fe80::601:6ff:fea7:6f01/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:168 errors:0 dropped:0 overruns:0 frame:0 TX packets:137 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:18903 (18.9 KB) TX bytes:15024 (15.0 KB) eth1 Link encap:Ethernet HWaddr 04:01:06:a7:6f:02 inet addr:10.128.2.25 Bcast:10.128.255.255 Mask:255.255.0.0 inet6 addr: fe80::601:6ff:fea7:6f02/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:6 errors:0 dropped:0 overruns:0 frame:0 TX packets:5 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:468 (468.0 B) TX bytes:398 (398.0 B) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Phần cần lưu ý ở đây là eth1
và trong inet addr
đó. Trong trường hợp này, địa chỉ mạng riêng là 10.128.2.25 . Địa chỉ này chỉ có thể truy cập được từ các server khác, trong cùng khu vực, đã bật mạng riêng.
Đảm bảo lặp lại bước này cho tất cả 3 server . Lưu các địa chỉ IP riêng tư này ở một nơi an toàn. Chúng sẽ được sử dụng trong suốt hướng dẫn này.
Bước 2 - Đặt địa chỉ ràng buộc cho Elasticsearch
Là một phần của Yêu cầu , bạn cài đặt Elasticsearch trên Server của chính nó. Hướng dẫn Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 14.04 chỉ cho bạn cách đặt địa chỉ liên kết cho localhost
để các server khác không thể truy cập dịch vụ. Tuy nhiên, ta cần thay đổi điều này để Logstash có thể gửi dữ liệu qua địa chỉ mạng riêng của nó.
Ta sẽ liên kết Elasticsearch với địa chỉ IP riêng của nó. Elasticsearch sẽ chỉ lắng nghe các yêu cầu đến địa chỉ IP này.
Trên server Elasticsearch, hãy chỉnh sửa file cấu hình:
- sudo nano /etc/elasticsearch/elasticsearch.yml
Tìm dòng chứa network.bind_host
. Nếu nó được comment ra ngoài, hãy bỏ ghi chú nó bằng cách xóa ký tự #
ở đầu dòng. Thay đổi giá trị thành địa chỉ IP riêng cho server Elasticsearch để nó trông giống như sau:
network.bind_host: private_ip_address
Cuối cùng, khởi động lại Elasticsearch để kích hoạt thay đổi.
- sudo service elasticsearch restart
Cảnh báo: Điều rất quan trọng là bạn chỉ cho phép các server mà bạn tin tưởng kết nối với Elasticsearch. Sử dụng iptables rất được khuyến khích. Đối với hướng dẫn này, bạn chỉ muốn tin tưởng địa chỉ IP riêng của Server rsyslog-server , có Logstash đang chạy trên đó.
Bước 3 - Cấu hình server tập trung để nhận dữ liệu
Trong phần này, ta sẽ cấu hình Server rsyslog-server để trở thành server tập trung có thể nhận dữ liệu từ các server log hệ thống khác trên cổng 514.
Để cấu hình server rsyslog nhận dữ liệu từ các server log hệ thống khác, hãy chỉnh sửa /etc/rsyslog.conf
trên rsyslog-server Server:
- sudo nano /etc/rsyslog.conf
Tìm những dòng này đã được comment trong rsyslog.conf
của bạn:
# provides UDP syslog reception #$ModLoad imudp #$UDPServerRun 514 # provides TCP syslog reception #$ModLoad imtcp #$InputTCPServerRun 514
Những dòng đầu tiên của mỗi phần ( $ModLoad imudp
và $ModLoad imtcp
) nạp imudp
và imtcp
module , tương ứng. imudp
là viết tắt của i nput m odule udp và imtcp
là viết tắt của i nput m odule tcp . Các module này lắng nghe dữ liệu đến từ các server log hệ thống khác.
Các dòng thứ hai của mỗi phần ( $UDPSerververRun 514
và $TCPServerRun 514
) cho biết rsyslog sẽ khởi động các server UDP và TCP tương ứng cho các giao thức này đang lắng nghe trên cổng 514 (là cổng mặc định của log hệ thống).
Để kích hoạt các module và server này, hãy bỏ ghi chú các dòng để file bây giờ chứa:
# provides UDP syslog reception $ModLoad imudp $UDPServerRun 514 # provides TCP syslog reception $ModLoad imtcp $InputTCPServerRun 514
Lưu file cấu hình log rsyslog.
Khởi động lại rsyslog bằng lệnh:
- sudo service rsyslog restart
Server rsyslog tập trung của bạn hiện đã được cấu hình để lắng nghe thông báo từ các trường hợp log hệ thống từ xa (bao gồm cả rsyslog).
Mẹo: Để xác thực file cấu hình rsyslog của bạn, bạn có thể chạy sudo rsyslogd -N1
.
Bước 4 - Cấu hình log rsyslog để gửi dữ liệu từ xa
Trong phần này, ta sẽ cấu hình rsyslog-client để gửi dữ liệu log đến Ryslog-server Server mà ta đã cấu hình ở bước trước.
Trong cài đặt rsyslog mặc định trên Ubuntu, bạn sẽ tìm thấy hai file trong /etc/rsyslog.d
:
-
20-ufw.conf
-
50-default.conf
Trên rsyslog-client , hãy chỉnh sửa file cấu hình mặc định:
- sudo nano /etc/rsyslog.d/50-default.conf
Thêm dòng sau vào đầu file trước phần log by facility
, thay thế private_ip_of_ryslog_server
bằng IP riêng của server tập trung của bạn:
*.* @private_ip_of_ryslog_server:514
Lưu và thoát khỏi file .
Phần đầu tiên của dòng ( . ) Nghĩa là ta muốn gửi tất cả các tin nhắn. Mặc dù nó nằm ngoài phạm vi của hướng dẫn này, bạn có thể cấu hình rsyslog để chỉ gửi một số tin nhắn nhất định. Phần còn lại của dòng giải thích cách gửi dữ liệu và nơi gửi dữ liệu. Trong trường hợp của ta , ký hiệu @
trước địa chỉ IP yêu cầu rsyslog sử dụng UDP để gửi tin nhắn. Thay đổi điều này thành @@
để sử dụng TCP. Tiếp theo là địa chỉ IP riêng của rsyslog-server với rsyslog và Logstash được cài đặt trên đó. Số sau dấu hai chấm là số cổng sẽ sử dụng.
Khởi động lại rsyslog để bật các thay đổi:
- sudo service rsyslog restart
Xin chúc mừng! Đến đây bạn đang gửi tin nhắn log hệ thống của bạn đến một server tập trung!
Mẹo: Để xác thực file cấu hình rsyslog của bạn, bạn có thể chạy sudo rsyslogd -N1
.
Bước 5 - Định dạng dữ liệu log thành JSON
Elasticsearch yêu cầu tất cả các tài liệu mà nó nhận được phải ở định dạng JSON và rsyslog cung cấp một cách để thực hiện điều này thông qua một mẫu.
Trong bước này, ta sẽ cấu hình server rsyslog tập trung của bạn để sử dụng mẫu JSON để định dạng dữ liệu log trước khi gửi đến Logstash, sau đó sẽ gửi đến Elasticsearch trên một server khác.
Quay lại máy chủ rsyslog-server , tạo một file cấu hình mới để định dạng thư thành định dạng JSON trước khi gửi đến Logstash:
- sudo nano /etc/rsyslog.d/01-json-template.conf
Sao chép các nội dung sau vào file chính xác như được hiển thị:
template(name="json-template" type="list") { constant(value="{") constant(value="\"@timestamp\":\"") property(name="timereported" dateFormat="rfc3339") constant(value="\",\"@version\":\"1") constant(value="\",\"message\":\"") property(name="msg" format="json") constant(value="\",\"sysloghost\":\"") property(name="hostname") constant(value="\",\"severity\":\"") property(name="syslogseverity-text") constant(value="\",\"facility\":\"") property(name="syslogfacility-text") constant(value="\",\"programname\":\"") property(name="programname") constant(value="\",\"procid\":\"") property(name="procid") constant(value="\"}\n") }
Khác với dòng đầu tiên và dòng cuối cùng, hãy lưu ý các dòng được tạo bởi mẫu này có dấu phẩy ở đầu chúng. Điều này là để duy trì cấu trúc JSON và giúp giữ cho file có thể đọc được bằng cách xếp mọi thứ gọn gàng. Mẫu này định dạng thư của bạn theo cách mà Elasticsearch và Logstash mong đợi nhận được chúng. Đây là những gì chúng sẽ trông như thế nào:
{ "@timestamp" : "2015-11-18T18:45:00Z", "@version" : "1", "message" : "Your syslog message here", "sysloghost" : "hostname.example.com", "severity" : "info", "facility" : "daemon", "programname" : "my_program", "procid" : "1234" }
Mẹo: Các tài liệu rsyslog.com hiển thị các biến có sẵn từ rsyslog nếu bạn muốn tùy chỉnh dữ liệu log . Tuy nhiên, bạn phải gửi nó ở định dạng JSON tới Logstash và sau đó đến Elasticsearch.
Dữ liệu được gửi chưa sử dụng định dạng này. Bước tiếp theo hiển thị để cấu hình server để sử dụng file mẫu này.
Bước 6 - Cấu hình Server tập trung để gửi tới Logstash
Bây giờ ta đã có file mẫu xác định định dạng JSON phù hợp, hãy cấu hình server rsyslog tập trung để gửi dữ liệu đến Logstash, trên cùng một Server cho hướng dẫn này.
Khi khởi động, rsyslog sẽ xem xét các file trong /etc/rsyslog.d
và tạo cấu hình từ chúng. Hãy thêm file cấu hình của riêng ta để mở rộng cấu hình.
Trên server rsyslog , hãy tạo /etc/rsyslog.d/60-output.conf
:
- sudo nano /etc/rsyslog.d/60-output.conf
Sao chép các dòng sau vào file này:
# This line sends all lines to defined IP address at port 10514, # using the "json-template" format template *.* @private_ip_logstash:10514;json-template
Dấu *.*
Ở đầu nghĩa là xử lý phần còn lại của dòng cho tất cả các thông báo log . Các ký hiệu @
nghĩa là sử dụng UDP (Sử dụng @@
để thay thế sử dụng TCP). Địa chỉ IP hoặc tên server sau ký tự @
là nơi chuyển tiếp tin nhắn. Trong trường hợp của ta , ta đang sử dụng địa chỉ IP riêng cho rsyslog-server vì server tập trung rsyslog và server Logstash được cài đặt trên cùng một Server. Địa chỉ này phải trùng với địa chỉ IP riêng mà bạn cấu hình Logstash để lắng nghe trong bước tiếp theo.
Số cổng tiếp theo. Hướng dẫn này sử dụng cổng 10514. Lưu ý server Logstash phải lắng nghe trên cùng một cổng sử dụng cùng một giao thức. Phần cuối cùng là file mẫu của ta hiển thị cách định dạng dữ liệu trước khi chuyển nó đi.
Đừng khởi động lại rsyslog. Đầu tiên, ta phải cấu hình Logstash để nhận tin nhắn.
Bước 7 - Cấu hình Logstash để nhận tin nhắn JSON
Trong bước này, bạn sẽ cài đặt Logstash, cấu hình nó để nhận các thông báo JSON từ rsyslog và cấu hình nó để gửi các thông báo JSON đến Elasticsearch.
Logstash yêu cầu Java 7 trở lên. Sử dụng các hướng dẫn từ Bước 1 của hướng dẫn Elasticsearch để cài đặt Java 7 hoặc 8 trên Server rsyslog-server .
Tiếp theo, cài đặt khóa bảo mật cho repository Logstash:
- wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Thêm định nghĩa repository vào file /etc/apt/sources.list
của bạn:
- echo "deb http://packages.elastic.co/logstash/2.3/debian stable main" | sudo tee -a /etc/apt/sources.list
Lưu ý: Sử dụng phương pháp echo
được mô tả ở trên để thêm repository Logstash. Không sử dụng add-apt-repository
vì nó cũng sẽ thêm một mục deb-src
, nhưng Elastic không cung cấp gói nguồn. Điều này sẽ dẫn đến lỗi khi bạn cố gắng chạy apt-get update
.
Cập nhật danh sách gói của bạn để bao gồm repository Logstash:
- sudo apt-get update
Cuối cùng, cài đặt Logstash:
- sudo apt-get install logstash
Bây giờ Logstash đã được cài đặt, hãy cấu hình nó để lắng nghe các thông báo từ rsyslog.
Cài đặt mặc định của Logstash tìm kiếm các file cấu hình trong /etc/logstash/conf.d
. Chỉnh sửa file cấu hình chính:
- sudo nano /etc/logstash/conf.d/logstash.conf
Sau đó, thêm các dòng này vào /etc/logstash/conf.d/logstash.conf
:
# This input block will listen on port 10514 for logs to come in. # host should be an IP on the Logstash server. # codec => "json" indicates that we expect the lines we're receiving to be in JSON format # type => "rsyslog" is an optional identifier to help identify messaging streams in the pipeline. input { udp { host => "logstash_private_ip" port => 10514 codec => "json" type => "rsyslog" } } # This is an empty filter block. You can later add other filters here to further process # your log lines filter { } # This output block will send all events of type "rsyslog" to Elasticsearch at the configured # host and port into daily indices of the pattern, "rsyslog-YYYY.MM.DD" output { if [type] == "rsyslog" { elasticsearch { hosts => [ "elasticsearch_private_ip:9200" ] } } }
Giao thức log hệ thống là UDP theo định nghĩa, vì vậy cấu hình này phản ánh tiêu chuẩn đó.
Trong khối đầu vào, hãy đặt địa chỉ server Logstash bằng cách thay thế ip riêng của logstash bằng địa chỉ IP riêng của rsyslog-server , cũng có cài đặt Logstash trên đó.
Khối đầu vào cấu hình Logstash để lắng nghe trên cổng 10514
để nó không cạnh tranh với các version log hệ thống trên cùng một máy. Một cổng nhỏ hơn 1024 sẽ yêu cầu Logstash được chạy dưới dạng root, đây không phải là một phương pháp bảo mật tốt.
Đảm bảo thay thế ip riêng của co giãn bằng địa chỉ IP riêng của Server Elasticsearch của bạn. Khối kết quả hiển thị một cấu hình có điều kiện đơn giản. Đối tượng của nó là chỉ cho phép các sự kiện phù hợp thông qua. Trong trường hợp này, đó chỉ là các sự kiện có “loại” “rsyslog”.
Kiểm tra các thay đổi về cấu hình Logstash của bạn:
- sudo service logstash configtest
Nó sẽ hiển thị Configuration OK
nếu không có lỗi cú pháp. Nếu không, hãy thử và đọc kết quả lỗi để xem có gì sai với cấu hình Logstash của bạn.
Khi tất cả các bước này hoàn thành, bạn có thể bắt đầu version Logstash của bạn bằng lệnh:
- sudo service logstash start
Cũng khởi động lại rsyslog trên cùng một server vì nó có một version Logstash để chuyển tiếp đến bây giờ:
- sudo service rsyslog restart
Để xác minh Logstash đang nghe trên cổng 10514:
- netstat -na | grep 10514
Bạn sẽ thấy thông tin như thế này:
udp6 0 0 10.128.33.68:10514 :::*
Bạn sẽ thấy địa chỉ IP riêng của rsyslog-server và số cổng 10514 mà ta đang sử dụng để lắng nghe dữ liệu rsyslog.
Mẹo: Để khắc phục sự cố Logstash, hãy dừng dịch vụ bằng sudo service logstash stop
và chạy nó ở nền trước với các thông báo chi tiết:
- /opt/logstash/bin/logstash -f /etc/logstash/conf.d/logstash.conf --verbose
Nó sẽ chứa các thông tin thông thường như xác minh bằng địa chỉ IP và cổng UDP mà Logstash đang sử dụng:
Starting UDP listener {:address=>"10.128.33.68:10514", :level=>:info}
Bước 8 - Xác minh đầu vào Elasticsearch
Trước đó, ta đã cấu hình Elasticsearch để lắng nghe trên địa chỉ IP riêng của nó. Bây giờ nó sẽ nhận được tin nhắn từ Logstash. Trong bước này, ta sẽ xác minh Elasticsearch đang nhận dữ liệu log .
Các server rsyslog-client và rsyslog-server sẽ gửi tất cả dữ liệu log của chúng tới Logstash, sau đó được chuyển tới Elasticsearch. Hãy tạo một thông báo bảo mật để xác minh Elasticsearch thực sự đang nhận những thông báo này.
Trên rsyslog-client , thực hiện lệnh sau:
- sudo tail /var/log/auth.log
Bạn sẽ thấy log bảo mật trên hệ thống local ở cuối kết quả . Nó sẽ trông tương tự như:
May 2 16:43:15 rsyslog-client sudo: sammy : TTY=pts/0 ; PWD=/etc/rsyslog.d ; USER=root ; COMMAND=/usr/bin/tail /var/log/auth.log May 2 16:43:15 rsyslog-client sudo: pam_unix(sudo:session): session opened for user root by sammy(uid=0)
Với một truy vấn đơn giản, bạn có thể kiểm tra Elasticsearch:
Chạy lệnh sau trên server Elasticsearch hoặc bất kỳ hệ thống nào được phép truy cập nó. Thay thế thunsearch_ip bằng địa chỉ IP riêng của server Elasticsearch. Địa chỉ IP này cũng phải là địa chỉ bạn đã cấu hình Elasticsearch để nghe trước đó trong hướng dẫn này.
- curl -XGET 'http://elasticsearch_ip:9200/_all/_search?q=*&pretty'
Trong kết quả , bạn sẽ thấy một cái gì đó tương tự như sau:
{ "_index" : "logstash-2016.05.04", "_type" : "rsyslog", "_id" : "AVR8fpR-e6FP4Elp89Ww", "_score" : 1.0, "_source":{"@timestamp":"2016-05-04T15:59:10.000Z","@version":"1","message":" sammy : TTY=pts/0 ; PWD=/home/sammy ; USER=root ; COMMAND=/usr/bin/tail /var/log/auth.log","sysloghost":"rsyslog-client","severity":"notice","facility":"authpriv","programname":"sudo","procid":"-","type":"rsyslog","host":"10.128.33.68"} },
Lưu ý tên của Server tạo ra thông báo rsyslog nằm trong log ( rsyslog-client ).
Với bước xác minh đơn giản này, cài đặt rsyslog tập trung của bạn đã hoàn tất và hoạt động đầy đủ!
Kết luận
Nhật ký của bạn hiện có trong Elasticsearch. Cái gì tiếp theo? Cân nhắc đọc những gì Kibana có thể làm để trực quan hóa dữ liệu bạn có trong Elasticsearch, bao gồm biểu đồ đường và biểu đồ thanh, biểu đồ hình tròn, bản đồ, v.v. Cách sử dụng Logstash và Kibana để tập trung log trên Ubuntu 14.04 giải thích cách sử dụng giao diện web Kibana để tìm kiếm và trực quan hóa log .
Có lẽ dữ liệu sẽ có giá trị hơn với việc phân tích cú pháp và mã hóa thêm. Nếu vậy, việc tìm hiểu thêm về Logstash sẽ giúp bạn đạt được kết quả đó.
Các tin liên quan
Cách cài đặt và cấu hình Elasticsearch trên Ubuntu 16.042016-05-04
Cách cài đặt và cấu hình VNC trên Ubuntu 16.04
2016-04-26
Cách thêm không gian swap trên Ubuntu 16.04
2016-04-25
Cách cài đặt WordPress với LEMP trên Ubuntu 16.04
2016-04-25
Cách cài đặt Java với Apt-Get trên Ubuntu 16.04
2016-04-23
Cách cài đặt WordPress với LAMP trên Ubuntu 16.04
2016-04-22
Cách thêm và xóa người dùng trên Ubuntu 16.04
2016-04-21
Cách cài đặt Git trên Ubuntu 16.04
2016-04-21
Có gì mới trong Ubuntu 16.04
2016-04-21
Cách nâng cấp lên Ubuntu 16.04 LTS
2016-04-08