Cách phát hiện bất thường với Skyline trên CentOS 7
Nếu bạn sử dụng hệ thống giám sát (như Zabbix hoặc Nagios) thì bạn biết cách giám sát hoạt động. Tóm lại, nó có thể được mô tả như sau: Một hệ thống giám sát nhận được nhiều số liệu khác nhau (sử dụng CPU / bộ nhớ, sử dụng mạng, v.v.). Ngay sau khi giá trị của một trong các chỉ số vượt ra ngoài ngưỡng được định nghĩa , nó sẽ kích hoạt trình kích hoạt tương ứng và hệ thống giám sát thông báo cho bạn rằng một trong các chỉ số nằm ngoài giới hạn bình thường. Các ngưỡng cho mỗi chỉ số thường được đặt theo cách thủ công, điều này không phải lúc nào cũng thuận tiện.Trong hướng dẫn này, bạn sẽ học cách cài đặt và cấu hình Skyline - một hệ thống phát hiện bất thường trong thời gian thực. Nó có thể phân tích một tập hợp các chỉ số trong thời gian thực mà không cần đặt hoặc điều chỉnh các ngưỡng cho từng chỉ số. Nó được thiết kế để sử dụng ở bất cứ nơi nào có số lượng lớn chuỗi thời gian (hàng trăm nghìn) cần theo dõi liên tục.
Trình kích hoạt ngưỡng
Hãy xem một ví dụ về hệ thống giám sát với các ngưỡng được đặt thủ công. Hình dưới đây cho thấy một biểu đồ cho tải CPU. Các đường đứt nét biểu thị các ngưỡng của trình kích hoạt.
Hình 1
Tại điểm 1 trong Hình 1, một quá trình đã bắt đầu và tải CPU đã tăng lên đáng kể. Trình kích hoạt đã được kích hoạt và administrator nhận thấy nó. Administrator quyết định rằng nó nằm trong các giá trị bình thường và thay đổi các ngưỡng kích hoạt thành các ngưỡng được hiển thị dưới dạng các đường gạch ngang phía trên.
Sau một thời gian trôi qua, trình chạy lại được kích hoạt tại điểm 2 trong Hình 1. Người quản trị phát hiện ra rằng dịch vụ thứ hai thường xuyên tạo bản backup và gây ra tăng tải. Sau đó, câu hỏi đặt ra: Bạn có nâng ngưỡng cao hơn hay để nguyên như vậy nhưng chỉ phớt lờ các báo động?
Hãy xem xét điểm 3. Tại thời điểm đó, tải sự kiện giảm xuống, nhưng administrator không được thông báo vì chưa vượt quá ngưỡng. Trình kích hoạt không kích hoạt.
Trường hợp đơn giản này cho ta thấy rằng có một số khó khăn khi đặt ngưỡng. Thật khó để điều chỉnh các giá trị ngưỡng để nắm bắt các vấn đề về hiệu suất mà không gây ra lỗi dương tính giả hoặc lỗi âm tính giả.
Để giúp giải quyết những vấn đề này, Skyline đã được tạo ra. Nó sử dụng một tập hợp các thuật toán phi tham số để phân loại các chỉ số bất thường.
Thành phần Skyline
Skyline bao gồm các thành phần sau: Horizon Agent, Analyzer Agent và Webapp.
Đại lý Horizon
Đặc vụ Horizon chịu trách nhiệm thu thập dữ liệu. Nó có Trình nghe , lắng nghe dữ liệu đến.
Nó chấp nhận dữ liệu ở hai định dạng: pickle (TCP) và MessagePack (UDP). Nó đọc các số liệu đến và đặt chúng vào một hàng đợi được chia sẻ mà Người lao động đọc từ đó. Nhân viên mã hóa dữ liệu thành Messagepack và nối nó vào database Redis. Horizon Agent cũng thường xuyên cắt và làm sạch các chỉ số cũ bằng Roombas . Nếu điều này không được thực hiện, thì tất cả bộ nhớ trống sẽ sớm cạn kiệt.
Đại lý phân tích
Tác nhân phân tích chịu trách nhiệm phân tích dữ liệu. Nó nhận danh sách các chỉ số từ Redis, chạy một số quy trình và chỉ định các chỉ số cho từng quy trình đó.Mỗi quy trình phân tích dữ liệu bằng cách sử dụng một số thuật toán. Mỗi thuật toán báo cáo kết quả - cho dù dữ liệu có bất thường hay không. Nếu phần lớn các thuật toán báo cáo rằng số liệu hiện tại có bất thường, dữ liệu được coi là bất thường .
Tất cả các số liệu bất thường được ghi vào một file . Trên cơ sở file này, một hình ảnh được tạo và hiển thị trong ứng dụng web.
Trình phân tích cũng có thể gửi thông báo: email, HipChat hoặc PagerDuty. Thông báo qua email được cấu hình sau trong bài viết này.
Ứng dụng web
Skyline cung cấp một ứng dụng web nhỏ để hiển thị các số liệu bất thường. Đó là một ứng dụng web đơn giản được viết bằng Python với khung công tác Flask. Phần trên hiển thị hai biểu đồ - giờ trước và ngày qua. Dưới biểu đồ là danh sách tất cả các chỉ số bất thường.
Database Redis
Redis là một database lưu trữ và lưu trữ key-value open-souce .
Skyline lưu trữ tất cả các chỉ số và chuỗi thời gian được mã hóa trong database Redis. Khi một điểm dữ liệu đến, một nhân viên Horizon đóng gói điểm dữ liệu với schemas [timestamp, value]
thành một chuỗi binary được mã hóa MessagePack và nối chuỗi này vào khóa số liệu thích hợp.
Hình 2 cho thấy sơ đồ tương tác của các thành phần của Skyline.
Hình 2
Yêu cầu
Trước khi có thể cài đặt Skyline, bạn cần hoàn thành các yêu cầu sau:
- Triển khai CentOS 7 Server.
- Thêm user sudo theo hướng dẫn Cài đặt Server Ban đầu . Tất cả các lệnh trong hướng dẫn này phải được chạy với quyền user không phải root này.
- Thêm không gian swap vào server của bạn. 4 GB là ổn.
- Cài đặt Graphite và thu thập theo các hướng dẫn trong hướng dẫn Cách giữ log lịch sử hiệu quả với Graphite, Carbon và sưu tầm trên CentOS 7 .
Bước 1 - Cài đặt Skyline và Redis
Để cài đặt Skyline, trước tiên hãy cài đặt các ứng dụng cần thiết bao gồm một số công cụ liên quan đến Python và web server Apache:
- sudo yum install httpd gcc gcc-c++ git pycairo mod_wsgi python-pip python-devel blas-devel lapack-devel libffi-devel
Nhận các file nguồn mới nhất cho Skyline từ GitHub:
- cd /opt
- sudo git clone https://github.com/etsy/skyline.git
Cài đặt một số gói Python bắt buộc:
- cd /opt/skyline
- sudo pip install -U six
- sudo pip install -r requirements.txt
Cài đặt các gói Python sau theo thứ tự được chỉ định này:
- sudo pip install numpy
- sudo pip install scipy
- sudo pip install pandas
- sudo pip install patsy
- sudo pip install statsmodels
- sudo pip install msgpack-python
Quá trình cài đặt một số gói có thể mất nhiều thời gian, vì vậy hãy kiên nhẫn.
Hầu hết chúng là các thư viện Python open-souce được sử dụng cho tính toán khoa học và kỹ thuật. Gói msgpack-python
cần thiết để đọc và ghi dữ liệu MessagePack .
Sao chép file cài đặt Đường chân trời mẫu vào đúng vị trí file :
- sudo cp /opt/skyline/src/settings.py.example /opt/skyline/src/settings.py
Tạo các folder sau:
- sudo mkdir /var/log/skyline
- sudo mkdir /var/run/skyline
- sudo mkdir /var/log/redis
- sudo mkdir /var/dump/
Như ta đã đề cập ở trên, Skyline lưu trữ tất cả các số liệu trong database Redis, vì vậy bạn cũng cần cài đặt nó:
- sudo yum install redis
Bạn có thể tìm thêm thông tin về Redis từ hướng dẫn Cách cài đặt và sử dụng Redis .
Bắt đầu các dịch vụ Skyline và Redis:
- cd /opt/skyline/bin
- sudo redis-server redis.conf
- sudo ./horizon.d start
- sudo ./analyzer.d start
- sudo ./webapp.d start
Để kiểm tra cài đặt, hãy chạy tập lệnh kiểm tra bao gồm:
- python /opt/skyline/utils/seed_data.py
Bạn sẽ thấy kết quả sau:
- Loading data over UDP via Horizon...
- Connecting to Redis...
- Congratulations! The data made it in. The Horizon pipeline seems to be working.
Quá trình cài đặt và cấu hình cơ bản của Skyline đã hoàn tất. Đến đây bạn cần gửi dữ liệu vào đó.
Bước 2 - Đưa dữ liệu vào Skyline
Như đã đề cập trước đó, Skyline chấp nhận dữ liệu ở hai định dạng: pickle (TCP) và MessagePack (UDP).
Bạn có thể viết tập lệnh hoặc module của riêng mình cho đại lý giám sát yêu thích của bạn và yêu cầu nó mã hóa dữ liệu bằng MessagePack để gửi đến Skyline để phân tích. Skyline chấp nhận các chỉ số ở dạng chuỗi được mã hóa MessagePack qua UDP. MessagePack là một đặc tả tuần tự hóa đối tượng giống như JSON. Định dạng là [<metric name>, [<timestamp>, <value>]]
. MessagePack có một API cho hầu hết các ngôn ngữ lập trình. Bạn có thể tìm thêm thông tin và ví dụ về API trên trang web chính thức của MessagePack .
Hướng dẫn này sẽ chỉ cho bạn cách gửi dữ liệu từ Graphite và collectd tới Skyline.
Lấy dữ liệu từ Graphite
Graphite bao gồm một số thành phần, một trong số đó là dịch vụ chuyển tiếp carbon . Carbon-relay chuyển tiếp các số liệu đến đến một version Graphite khác để dự phòng. Vì vậy, bạn có thể trỏ dịch vụ chuyển tiếp carbon tới server nơi Skyline đang chạy.
Hình 3
Hình 3 cho thấy một sơ đồ của stream dữ liệu. Dữ liệu từ các đại lý bên ngoài giám sát ( collectd , kim cương , statsd vv) hoặc hệ thống ( Nagios , Icinga , sensu vv) được chuyển vào Graphite. Tiếp theo, carbon-relay chuyển tiếp dữ liệu vào Skyline. Carbon-relay, carbon-cache và Skyline có thể chạy trên một server duy nhất hoặc trên các server riêng biệt.
Bạn cần cấu hình Graphite, collectd và Skyline để stream dữ liệu này hoạt động.
Nếu bạn không sao chép ví dụ relay-rules.conf
vào vị trí thích hợp cho file cấu hình carbon-relay trước đó, bạn phải thực hiện ngay bây giờ:
- sudo cp /opt/graphite/conf/relay-rules.conf.example /opt/graphite/conf/relay-rules.conf
Hãy mở file cấu hình relay-rules.conf
để chỉnh sửa:
- sudo vi /opt/graphite/conf/relay-rules.conf
Thêm server Skyline của bạn vào danh sách các điểm đến, trong đó SKYLINE HOST của BẠN là địa chỉ IP của server Skyline của bạn:
[default] default = true destinations = 127.0.0.1:2004, YOUR_SKYLINE_HOST:2024
Tất cả các đích được sử dụng trong relay-rules.conf
cũng phải được xác định trong file cấu hình carbon.conf
.
Mở file cấu hình carbon.conf
để thực hiện thay đổi này:
- sudo vi /opt/graphite/conf/carbon.conf
Sau đó tìm phần [relay]
và chỉnh sửa dòng DESTINATIONS
:
[relay] ... DESTINATIONS = 127.0.0.1:2004, YOUR_SKYLINE_HOST:2024 ...
Khi bạn đã thực hiện những thay đổi này, hãy bắt đầu dịch vụ tiếp khí carbon:
- sudo systemctl start carbon-relay
Cho phép đường chân trời truy cập vào Graphite-Web
Trong Cách lưu giữ log lịch sử hiệu quả với Graphite, Carbon và collectd trên CentOS 7 , nếu bạn chọn bảo vệ bằng password cho giao diện web Graphite, bạn phải cho phép truy cập từ localhost mà không cần password để Skyline hoạt động.
Để làm như vậy, hãy chỉnh sửa file cấu hình Graphite:
- sudo vi /etc/httpd/conf.d/graphite.conf
Thêm các dòng màu đỏ sau vào khối <Location>
:
<Location "/"> AuthType Basic AuthName "Private Area" AuthUserFile /opt/graphite/secure/.passwd Require user sammy Order Deny,Allow Deny from all Allow from localhost Satisfy Any </Location>
Sau đó khởi động lại dịch vụ Apache:
- sudo systemctl restart httpd
Lấy dữ liệu từ Collectd
Bạn cũng có thể cấu hình collectd để gửi dữ liệu đến Skyline. Mở file cấu hình của nó:
- sudo vi /etc/collectd.conf
Thay đổi số cổng trong khối <Plugin write_graphite>
thành 2013
:
<Plugin write_graphite> . . . Port "2013" . . .
Sau đó khởi động lại sưu tập:
- sudo systemctl restart collectd.service
Để tránh nhầm lẫn, Hình 4 cho thấy một sơ đồ đơn giản với các số cổng chính xác.
hinh 4
Số cổng chính xác như sau:
- Carbon-relay lắng nghe dữ liệu đến ở định dạng bản rõ trên cổng 2013
- Carbon-relay gửi dữ liệu ở định dạng dưa
- Bộ nhớ đệm carbon lắng nghe dữ liệu đến ở định dạng pickle trên cổng 2004
- Nhân viên Horizon lắng nghe dữ liệu đến ở định dạng pickle trên cổng 2024
Chú ý! Nếu bạn khởi động tác nhân Horizon và bộ tổng hợp carbon tùy chọn trên cùng một server , bạn phải thay đổi các cổng của chúng. Theo mặc định, cả hai đều được đặt thành cùng một cổng 2024 .
Bước 3 - Cài đặt Đường chân trời
Tệp cấu hình Skyline chứa nhiều cài đặt. Mở file để chỉnh sửa:
- sudo vi /opt/skyline/src/settings.py
Mỗi cài đặt trong file này được ghi lại thông qua các comment thông tin trong chính file . Tối thiểu, bạn cần đặt các thông số sau, thay thế văn bản màu đỏ bằng các giá trị của bạn:
-
GRAPHITE_HOST = ' YOUR_GRAPHITE_HOST '
-
HORIZON_IP = ' 0.0.0.0 '
-
WEBAPP_IP = ' YOUR_SKYLINE_HOST_IP '
Các tùy chọn khác có thể được để giá trị mặc định của chúng. Chúng như sau:
-
FULL_DURATION
- Tùy chọn này chỉ định khoảng thời gian tối đa mà dữ liệu sẽ được lưu trữ trong Redis và phân tích. Thời lượng lâu hơn sẽ mất nhiều thời gian hơn để phân tích, nhưng chúng có thể giúp giảm nhiễu và cung cấp khả năng phát hiện bất thường chính xác hơn. Giá trị mặc định là86400
giây. -
CARBON_PORT
- Tùy chọn này chỉ định cổng carbon. Giá trị mặc định là2003
. -
ANALYZER_PROCESSES
- Tùy chọn này chỉ định số lượng quá trình mà trình phân tích Skyline sẽ tạo ra. Bạn nên đặt tham số này nhỏ hơn một vài so với tổng số CPU trên server của bạn. Giá trị mặc định là5
. -
WORKER_PROCESSES
- Tùy chọn này chỉ định số lượng quy trình công nhân sẽ sử dụng từ hàng đợi Horizon. Giá trị mặc định là2
. -
PICKLE_PORT
- Tùy chọn này chỉ định cổng TCP lắng nghe dưa chua của Graphite. Giá trị mặc định là2024
. -
UDP_PORT
- Tùy chọn này chỉ định cổng UDP lắng nghe các gói được mã hóa MessagePack. Giá trị mặc định là2025
. -
WEBAPP_PORT
- Tùy chọn này chỉ định cổng cho ứng dụng web Skyline. Giá trị mặc định là1500
.
Sau khi thực hiện những thay đổi này, bạn phải khởi động lại ứng dụng tương ứng:
- sudo /opt/skyline/bin/horizon.d restart
- sudo /opt/skyline/bin/analyzer.d restart
- sudo /opt/skyline/bin/webapp.d restart
Sau đó, bạn có thể mở liên kết http:// your_server_ip :1500
và xem trang web Skyline (Hình 5). Nó sẽ hiển thị số liệu bất thường khi chúng được tìm thấy.
Hình 5
Để Skyline hoạt động hết công suất, bạn cần đợi cho đến khi FULL_DURATION
giây trôi qua. Theo mặc định, FULL_DURATION
được đặt thành 1 ngày ( 86400
giây).
Bạn nên đợi ít nhất một giờ để bắt đầu theo dõi các điểm bất thường. Điều này sẽ cho Skyline thời gian để tích lũy thông tin về các mức tải bình thường. Cố gắng không tạo thêm tải cho hệ thống trong khi Skyline đang cài đặt đường cơ sở.
Bước 4 - Bật thông báo qua email
Theo mặc định, Skyline hiển thị các điểm bất thường được phát hiện trong giao diện web của nó ( http:// your_server_ip :1500
) khi chúng được tìm thấy và trong khi chúng vẫn đang xảy ra. Ngay sau khi điểm bất thường biến mất, chỉ số tương ứng của nó sẽ không xuất hiện khỏi giao diện này. Vì vậy, bạn phải theo dõi trang web để xem những bất thường này, điều này không phải lúc nào cũng thuận tiện.
Bạn có thể cấu hình cảnh báo qua email để không bỏ lỡ chúng.
Để làm như vậy, hãy mở file cấu hình Skyline:
- sudo vi /opt/skyline/src/settings.py
Đảm bảo rằng cảnh báo được bật:
ENABLE_ALERTS = True
Sau đó, tìm phần ALERTS sau và thêm schemas sau với màu đỏ:
ALERTS = ( (^)("collectd", "smtp", 1800)(^), )
Giá trị đầu tiên trong schemas là quá trình cần giám sát. Trong trường hợp này, nó là collectd.
Giá trị thứ hai của schemas là smtp
, viết tắt của cảnh báo qua email. Giá trị cuối cùng của 1800
bằng giây. Nghĩa là các cảnh báo sẽ không kích hoạt nhiều hơn một lần trong vòng 30 phút (1800 giây) ngay cả khi phát hiện thấy kích hoạt. Sửa đổi giá trị này để đáp ứng tốt nhất nhu cầu của bạn.
Cũng tìm phần sau và sửa đổi nó cho các địa chỉ email bạn muốn sử dụng. Thông báo qua email sẽ được gửi đến account (^) administrator@example.com (^) từ (^) skyline-alerts@example.com (^).
SMTP_OPTS = { "sender": "(^)skyline-alerts@example.com(^)", "recipients": { "collectd": ["(^)administrator@example.com(^)"], }, }
Sau khi thực hiện tất cả những thay đổi này, bạn phải khởi động lại trình phân tích:
- sudo /opt/skyline/bin/analyzer.d restart
Bước 5 - Kiểm tra Skyline
Để kiểm tra Skyline, ta có thể tạo mức tăng đột biến CPU bằng lệnh bash:
- dd if=/dev/zero of=/dev/null
Bạn có thể dừng lệnh bất kỳ lúc nào bằng cách nhấn CTRL-C. Vài phút là đủ để tạo ra sự bất thường.
Nếu bạn nhìn vào giao diện web Skyline trong khi chạy lệnh này, bạn sẽ thấy các điểm bất thường được phát hiện. Một ví dụ được thể hiện trong Hình 6.
Hình 6
Bạn có thể thấy rằng do tải CPU cao, tốc độ của các thành phần của Skyline giảm xuống. Tất cả các chỉ số bất thường được phát hiện được hiển thị dưới dạng danh sách ở cuối trang web. Khi bạn di chuột qua tên của một trong các số liệu, trong biểu đồ phía trên, bạn có thể thấy chuỗi thời gian tương ứng cho giờ trước và ngày. Nhấp vào tên của chỉ số để mở một biểu đồ chi tiết hơn, được tạo bởi Graphite (xem Hình 7 để biết ví dụ).
Hình 7
Tải CPU không đạt đến giá trị cực cao trong ví dụ này và không vượt quá ngưỡng. Trong trường hợp này, hệ thống giám sát cổ điển không thể tìm ra sai lệch. Trường hợp như vậy đã được đề cập trước đó (Hình 1, điểm 3).
Không giống như các hệ thống giám sát cổ điển, Skyline có thể nhanh chóng tìm ra các sai lệch và thông báo cho bạn về chúng.
Bước 6 - Điều chỉnh thuật toán (Tùy chọn)
Như đã đề cập trước đó, Skyline đang sử dụng một tập hợp các thuật toán để phát hiện sự bất thường. Các thuật toán sau hiện đang được triển khai:
- Nghĩa là độ lệch tuyệt đối
- Grubbs 'thử nghiệm
- Giờ đầu tiên trung bình
- Độ lệch chuẩn so với mức trung bình
- Độ lệch chuẩn so với đường trung bình động
- Bình phương nhỏ nhất
- Thùng biểu đồ
- Kiểm tra Kolmogorov – Smirnov
Hầu hết chúng đều dựa trên biểu đồ сontrol ( còn gọi là biểu đồ Shewhart) và luật ba sigma . Họ sử dụng thư viện Python SciPy và NumPy trong tính toán của họ.
Bạn có thể tùy chỉnh bất kỳ thuật toán nào được sử dụng. Bạn cũng có thể sửa đổi, xóa hoặc thêm những cái mới. Để làm điều này, bạn phải chỉnh sửa file cấu hình:
sudo vi /opt/skyline/src/analyzer/algorithms.py
Mỗi thuật toán trong file này được cung cấp một mô tả nhỏ. Ví dụ, hãy kiểm tra thuật toán sau:
def median_absolute_deviation(timeseries): """ A timeseries is anomalous if the deviation of its latest datapoint with respect to the median is X times larger than the median of deviations. """ series = pandas.Series([x[1] for x in timeseries]) median = series.median() demedianed = np.abs(series - median) median_deviation = demedianed.median() # The test statistic is infinite when the median is zero, # so it becomes super sensitive. We play it safe and skip when this happens. if median_deviation == 0: return False test_statistic = demedianed.iget(-1) / median_deviation # Completely arbitary...triggers if the median deviation is # 6 times bigger than the median if test_statistic > 6: return True
Dựa trên bản chất dữ liệu , bạn có thể cần thay đổi giá trị ngưỡng từ 6
sang giá trị khác - 4
, 5
, 7
, v.v.
Bạn cũng có thể điều chỉnh một số cài đặt trong file settings.py
:
ALGORITHMS = [ 'first_hour_average', 'mean_subtraction_cumulation', 'stddev_from_average', 'stddev_from_moving_average', 'least_squares', 'grubbs', 'histogram_bins', 'median_absolute_deviation', 'ks_test', ] CONSENSUS = 6
Tùy chọn ALGORITHMS
chỉ định các thuật toán mà Trình phân tích sẽ chạy. Bạn có thể comment bất kỳ ai trong số họ để vô hiệu hóa chúng hoặc thêm các thuật toán mới. Tùy chọn CONSENSUS
chỉ định số lượng thuật toán phải trả về True
trước khi một số liệu được gọi là bất thường. Để tăng độ nhạy, bạn có thể giảm tùy chọn này và ngược lại.
Kết luận
Skyline đã được chứng minh tốt trong các hệ thống CNTT thay đổi động phức tạp. Nó có thể hữu ích cho các lập trình viên thường xuyên áp dụng các thay đổi đối với hệ điều hành và muốn nhanh chóng phát hiện các điểm bất thường trong số liệu hệ thống sau khi phát hành phần mềm mới.
Những ưu điểm chính của nó bao gồm:
- Phân tích tốc độ cao với lượng lớn dữ liệu
- Không cần đặt các thông số riêng lẻ cho từng chỉ số
- Khả năng thêm các thuật toán của bạn để phát hiện bất thường
Nó cũng có một số nhược điểm:
- Dữ liệu của từng chỉ số được phân tích bằng một số thuật toán yêu cầu tài nguyên hệ thống máy tính đáng kể.
- Tất cả dữ liệu được lưu trữ trong RAM, cho phép hệ thống hoạt động rất nhanh chóng. Với một số lượng lớn các chỉ số và thời gian phân tích dài, bạn cần một lượng lớn RAM.
Các tin liên quan
Cách cài đặt và cấu hình mod_deflate trên CentOS 72015-06-12
Cách hạn chế tài nguyên bằng cách sử dụng nhóm trên CentOS 6
2015-06-10
Cách phân tích chỉ số hệ thống với InfluxDB trên CentOS 7
2015-06-04
Cách quản lý / vv với Kiểm soát phiên bản bằng Etckeeper trên CentOS 7
2015-04-20
Cách cài đặt WordPress với OpenLiteSpeed trên CentOS 7
2015-04-16
Cách backup server CentOS 7 bằng Bacula
2015-04-13
Cách sử dụng MariaDB với Ứng dụng Django của bạn trên CentOS 7
2015-03-25
Cách thiết lập LEPP hai node trên CentOS 7
2015-03-19
Cách cài đặt Ruby on Rails với rbenv trên CentOS 7
2015-03-16
Cách cài đặt MediaWiki trên CentOS 7
2015-03-12