Thứ Sáu, 25 tháng 8, 2017

Docker cho người mới bắt đầu (P1)

Đây là bài viết đầu tiên trong loạt bài viết về Docker của mình, mời các bạn đón đọc.

Người người docker, nhà nhà docker

Thời gian gần đây, docker là cụm từ được nhắc đến rất nhiều.
Là một lập trình viên trẻ, trâu, ưa tìm tòi, khám phá cái mới, mình cũng xông pha xem dockergiúp được gì cho 1 cậu lập trình viên như mình.
Sau một thời gian tìm hiểu và dùng thử, mình thấy, ờ, nó hữu ích cho mình thật, đặc biệt là 1 server developer.
Trước khi xem nó giúp ích được gì cho mình, mình muốn ôn lại lịch sử một chút.

The history

Ngày xưa, mô hình máy chủ thường là 1 máy chủ vật lý + 1 hệ điều hành (OS) + 1 application.
server1
Khi ứng dụng phát triển lên, mô hình này nảy sinh ra nhiều vấn đề, ví dụ:
– Lãng phí tài nguyên: mặc dù cấu hình máy thuộc dạng khủng, ổ cứng vi vu, nhưng hệ thống lại không tận dụng được hết lợi thế này.
– Khó khăn trong việc mở rộng hệ thống: muốn mở rộng bạn phải thuê thêm server, rồi thì cấu hình, rồi thì cân bằng tải (load balacing), blah blah. Phew!
Lúc này, công nghệ ảo hóa (vitualization) ra đời.
Ảo hóa
Ảo hóa
Với công nghệ ảo hóa, trên cùng 1 máy chủ vật lý, mình có thể tạo ra nhiều OS, tức là sẽ chạy được nhiều application. Vậy là tài nguyên của máy được tận dụng tốt hơn. Tuy nhiên, việc ảo hóa này lại nảy sinh vấn đề mới:
– Ngốn tài nguyên: khi chạy 1 máy ảo, nó sẽ luôn chiếm 1 phần tài nguyên cố định. Vd: máy chủ bạn có 512GB SSD, 16GB RAM (hàng khủng :v). Bạn tạo ra 4 máy ảo Linux, mỗi máy bạn cấp 64GB SSD và 2GB RAM. Như vậy, bạn sẽ mất 256 GB SSD để chứa 4 máy ảo, và khi chạy cùng 4 máy ảo lên cùng lúc, chúng sẽ chiếm 8GB RAM. Mặc dù chỉ chạy lên để không đó thôi, chưa dùng gì cả nhưng nó vẫn chiếm từng đó.
– Tốn thời gian thực thi: thời gian khởi động, shutdown của các máy ảo sẽ lâu, thường là hàng phút lận.
– Cồng kềnh: rõ ràng, việc phải gánh cho cả 1 team như vậy thì cái server của bạn không thế chạy hết hiệu suất được.
Bước tiến hóa tiếp theo, người ta phát minh ra containerlization (từ này mình không dịch được nên để nguyên luôn :P)
Containerlization
Containerlization
Với công nghệ này, trên một máy chủ, ta sẽ sinh ra được nhiều máy con (giống với ảo hóa), nhưng điều đặc biệt là các máy con (Guess OS) này đều dùng chung phần nhân của máy mẹ (host OS) và chia sẻ với nhau tài nguyên của máy mẹ (RAM chẳng hạn). Như vậy việc tận dụng tài nguyên sẽ được tối ưu hơn.
Ngoài ra, việc sử dụng hệ thống file cắt lớp (layer file system) sẽ khiến việc tối ưu tài nguyên hiệu quả hơn.
Hệ thống file cắt lớp
Hệ thống file cắt lớp
Cụ thể, mỗi máy con (container) mới, nó sẽ được xây dựng dựa trên 1 file ảnh (image) dạng chỉ đọc (read-only). Trong mỗi máy con sẽ có thêm 1 lớp bọc có-thể-ghi-được (writabe-layer), các thay đổi trong máy con sẽ được ghi lên đây. Như vậy, từ 1 image ban đầu, ta có thể tạo nhiều máy con mà chỉ tốn rất ít dung lượng ổ đĩa.
Nghe có vẻ hay đấy, vậy Dockergiúp được gì cho anh server dev như tôi nào?

Docker làm được gì

Docker làm được rất nhiều việc, nhưng trong phạm vi loạt bài viết này, mình chỉ giới thiệu những tính năng mà nó thực sự giúp ích cho 1 anh server dev thôi.

Giả lập môi trường trên server ở dưới máy local

Một trong những ác mộng của server dev là code chạy dưới local thì ngon lành cành đào, nhưng khi deploy dự án lên server thì…tạch. Nguyên nhân đa phần là do sự khác nhau về môi trường giữa local và server (local chạy Ubuntu, server chạy CentOS chẳng hạn, hay server chạy Ruby 2.2.3 trong khi local chạy Ruby 2.3).
Với Docker, ta có thể tạo ra một môi trường y hệt như trên server và chạy thử chương trình ở đó.

Dùng thử một hệ điều hành mới

Cái này thì khá rõ ràng rồi, máy bạn chạy Ubuntu, bạn muốn thử với CentOS xem thế nào, Docker là giải pháp tuyệt vời.

Trải nghiệm một môi trường lập trình mới

Giả sử bạn đang nghe người người nhà nhà nói về Golang, và bạn muốn cài và thử, nhưng việc cài ngay trên máy mình sẽ ảnh hưởng đến môi trường hiện tại của bạn, lại còn tốn ổ đĩa nữa, vọc xong thì không biết đã cài những gì để xóa đi.
Bạn tạo 1 Docker container sau đó thử thiếc, check hàng đã đời trong đó, xong nếu không muốn nữa thì chỉ việc xóa Container đó đi. Xong. Xó sạch mọi dấu vết 😀

Chia sẻ môi trường lập trình cho nhóm làm việc

Khi bạn tạo ra một container với môi trường thuận lợi cho một dự án rồi, bạn có thể chia sẻ dễ dàng cho các thành viên khác trong nhóm. Từ đó, họ sẽ tiết kiệm được kha khá thời gian trong việc cài đặt môi trường.

Test song song

Có những automation test khá là nặng và tốn thời gian (như việc tương tác mạng, upload, download chẳng hạn), nếu chạy test trên 1 máy thì sẽ rất tốn thời gian.
Ta tạo ra nhiều Container giống nhau (việc tạo này cực kỳ đơn giản vì nó dùng chung 1 file gốc – Image), sau đó chi task ra cho chúng thực hiện cùng 1 lúc => tiết kiệm được thời gian và tận dụng được tài nguyên của server (hoặc của máy mình).

Test app trên một hệ điều hành khác

Giả sử bạn viết 1 ruby gem, nó chạy tốt trên Ubuntu, nhưng còn các môi trường khác thì sao? Ta không thể cài hay đi mượn cho đủ các môi trường đó được. Hãy để Docker giúp 😛

Thử cấu hình cân bằng tải

Để học về cân bằng tải, trước kia ta phải có ít nhất 2 server, xong rồi mới tính tới chuyện cấu hình, testing cân bằng tải được.
Với Docker, ta tạo ra được nhiều máy thì nó chính là những con server của mình rồi, tha hồ thử mà không sợ tốn tiền 😛

Thử các tool auto deployment

Docker container nó là 1 cái máy mà, cũng có IP, cũng có mọi thông số như một con server, nên thay vì bỏ tiền thuê server thì mình có thể deploy thẳng vào container của mình 😀

Và còn nhiều, nhiều nữa

Đang chờ bạn khám phá thêm 😛
Bài viết này, mình đưa đến một cái nhìn đầu tiên về Docker và những lợi ích mà nó có thể đem lại cho chúng ta. Bài viết tiếp theo, mình sẽ giới thiệu về các thành phần của Docker và cách cài đặt cũng như những bước chào hỏi, làm quen đầu tiên với Docker. Mời các bạn đón đọc 😀

Docker là gì? Cơ bản về Docker


Trong thời gian gần đây có rất nhiều bài báo, hay blog, và cả trên Twitter có rất nhiều người đề cập đến Docker. Vậy Docker là gì và tại sao nó hữu ích.

# Docker là gì?

Docker - đây là một công cụ tạo môi trường được "đóng gói" (còn gọi là Container) trên máy tính mà không làm tác động tới môi trường hiện tại của máy, môi trường trong Docker sẽ chạy độc lập.
Một số developer thường tạo sẵn các môi trường này, và upload lên mạng để mọi người lấy về dùng, và mấy cái này gọi là các Images.

# Docker và máy ảo?

Docker là công cụ tạo môi trường đóng gói, nó còn đóng gói cả hệ điều hành trong đó, vậy Docker khác máy ảo chỗ nào?

Máy ảo

Mỗi máy ảo chứa ứng dụng, kèm theo các thư viện và hệ điều hành, mỗi ứng dụng như vậy chiếm hàng chục GBs.

Docker

Mỗi containers chứa ứng dụng gồm chứa các thư viện riêng, nhưng kernel được chia sẻ với các containers khác. Mỗi kernel được chạy trong các môi trường độc lập với nhau. Docker infrastructure chạy được trên mọi máy tính, đám mây hay nền tảng nào. Vì vậy bạn có thể vận chuyển ứng dụng đến bất cứ đâu và không cần phải quan tâm đến môi trường phát triển, thiếu thư viện, ...



Tóm lại, docker:

  • Docker rất tốt tại việc xây dựng và chia sẻ Disk Image qua hệ thống Docker Index
  • Docker là một phần mềm quản lý cơ sở hạ tầng.
  • Docker làm việc tuyệt vời với các công cụ quản lý file config (vd: Chef, Puppet)
  • Docker sử dụng btrfs để giảm sát các file hệ thống và có thể được chia sẻ với user khác. (Như cách hoạt động của Git)
  • Docker có một bộ kho trung tâm của các Disk Images (có thể được public hoặc private), điều này cho phép bạn dễ dàng chạy trên nhiều hệ điều hành khác nhau (Ubuntu, Centos, Fedora, Gentoo).

# Khi nào thì sử dụng Docker

  • Docker là một công cụ đơn giản, như Git hay Java, mà cho phép bạn kết hợp chặt chẽ tới công việc phát triển hay điều hành hàng ngày của bạn.
  • Sử dụng Docker như là một phần mềm quản lý phiên bản (version control system) cho toàn hệ điều hành của bạn.
  • Sử dụng Docker khi bạn muốn đóng góp hay hợp tác hệ điều hành của bạn với một nhóm nào đó.
  • Sử dụng Docker để chạy những dòng code trên laptop của bạn trong môi trường giống hệt như trên server của bạn.
  • Sử dụng Docker khi app của bạn cần trải qua nhiều giai đoạn khác nhau của quá trình phát triển.

Hãy thử dùng và trải nghiệm docker. Mình sẽ liệt kê một số lệnh hay dùng trong Docker

# Các lệnh cơ bản

Pull một image từ Docker Hub

docker pull <image name> 

Tạo một container từ image có sẵn

docker run -v <thư mục trên máy tính>:<thư mục trong container> -it <image name> /bin/bash


Lệnh trên tạo container, liên kết một thư mục trên máy tính vào bên trong container, và mở bash trong máy đó.

Khi cần phải map cổng đó từ container ra máy tính ngoài, khi đó chúng ta dùng thêm tham số -p như sau:
docker run -v /abc:/abc -p 8080:8080 -it ubuntu /bin/bash

Lệnh trên map cổng 8080 của container ra cổng 8080 của máy tính hiện tại.

Liệt kê các images hiện có

docker images


Trong kết quả trả về của lệnh này, chúng ta lưu ý các thông số: 
  • TAG: là tên của image, ví dụ duyetdev/docker-spark 
  • IMAGE ID: là ID của image lưu trong hệ thống, ví dụ 91e54dfb1179 

Liệt kê các container đang chạy

docker ps
docker ps -a # liệt kê các container đã tắt


  • CONTAINER ID: Là ID của container đó, ví dụ 4cc671941ee3 
  • NAME: Là tên riêng của container, được tạo ra một cách ngẫu nhiên hoặc có thể tự đặt, ví dụ stupefied_blackwell 

Khởi động và truy cập lại vào một container đã tắt

Nếu một container đã tắt (không xuất hiện khi dùng lệnh docker ps nữa, chúng ta có thể chạy lệnh docker ps -a để lấy ID hoặc NAME của nó, sau đó dùng lệnh sau để khởi động và truy cập lại vào đó)
docker start <ID hoặc NAME>
docker exec -it <ID hoặc NAME> /bin/bash 

Xoá một container


Nếu một container đã hết giá trị lợi dụng, dù nó đã tắt nhưng nó vẫn chiếm một phần dung lượng trên máy tính, để xoá nó đi, chúng ta dùng lệnh 
docker rm <ID hoặc NAME>


Nếu container đang chạy, bạn cũng có thể xoá nhưng phải thêm tham số -f vào sau rm để force remove:
docker rm -f <ID hoặc NAME>

Xoá một image

Cũng như container, nếu bạn đã ko còn nhu cầu sử dụng một image nào đó nữa, thì nên xoá nó đi. Dùng lệnh rmi
docker rmi <ID hoặc NAME>
# or
docker rmi -f <ID hoặc NAME>

# Kết

Sự thật là Docker đang dần thay đổi nhiều lập trình viên và đặc biệt là các admin cách làm việc của họ. 
Và cộng đồng Docker đang phát triển rất mạnh. Vậy hãy dành chút thời gian và thử dùng Docker và bạn sẽ cảm thấy sự tuyệt vời của Docker qua chính trải nghiệm của mình..

Có thời gian mình sẽ chia sẻ một số Image docker hay sử dụng.
Đây là một bài viết về cách deploy Apache Spark, deploy số máy vài chục hoặc vài trăm node chỉ với vài bước đơn giản: http://blog.duyetdev.com/2015/12/apache-spark-on-docker.html#.VnmHCBV97IU

Tham khảo:

Thứ Năm, 24 tháng 8, 2017

6 lợi ích khi sử dụng Docker

Docker là một nền tảng mở (open platform), dùng để phát triển và vận hành ứng dụng.
1. Với sự hỗ trợ của docker, việc coding, testing, deploying trở nên đơn giản hơn.
2. Khả năng di động (portable): môi trường develop được dựng lên bằng docker có thể chuyển từ người này sang người khác mà không làm thay đổi cấu hình ở trong. Trong kỹ thuật, được gọi là provisioning.
3. Application-centric: docker được dùng trên nhiều môi trường, đặc biệt tương thích trên môi trường develop, hướng đến việc coding thuận tiện nhất.
4. Versioning: docker được tích hợp VCS-git, để tracking các dòng lệnh thiết lập, hay đánh dấu version.
5. Component re-use: nghĩa là docker có khả năng sử dụng lại resource trước đó, bằng cách đánh dấu những resources giống nhau bằng một mã ID. Các môi trường được dựng lên sau đó sẽ kiểm tra các mã ID trước đó, nếu trùng docker sẽ sử dụng lại.
6. Sharing: với Docker Hub (public registry), các developer có thể tìm và sử dụng các môi trường được dựng sẵn.
OS nào có thể dùng Docker:
1. Linux: Ubuntu 12.04+, Fedora 19/20+, RHEL 6.5+, CentOS 6+, Gentoo, ArchLinux, openSUSE 12.3+, CRUX 3.0+
2. Cloud: Amazon EC2m Google Compute Engine, Microsoft Azure,…
3. Max OS X
4. Windows: Windows 7+

Thứ Tư, 28 tháng 6, 2017

Central Log Server- Logstash,kibana,elasticsearch

QUẢN LÝ LOG TẬP TRUNG VS LOGSTASH,ELASTICSEARCH,KIABANA.
Nếu bạn là người đã or trước đây chịu trách nhiệm việc kiểm tra và phân tích nhật ký hệ thống log trong hệ thống Linux bạn sẽ thấy đó là một cơn ác mộng khi mà phải theo dõi nhiều dich vụ đồng thời,
Trước đây nhiệm vụ đó phải thực hiện thủ công,và mỗi lại bản ghi phải được xử lý riêng. May mắn thay với sự kếp hợp của logstash,kiabana,elasticsearch  ở phía server và filebeat ở phí client làm cho công việc trở nên dễ dàng như đi bộ,
Ba thành phần đầu tiên tạo thành bộ ELK,có nhiệm vụ thu thập các bản ghi từ nhiều máy chủ cùng một lúc.
Một giao diện web dựa trên java cho phép bạn kiểm tra các bản ghi một cách nhanh chóng trong nháy mắt và khắc phục sự cố dễ dàng hơn.Các bản ghi được gửi từ các client to server trung tâm bởi Filebeat, có thể được mô tả như một đại lý vận chuyển log.
Chúng ta hãy xem làm thế nào các thành phần này kết hợp với nhau để làm việc,
Mô hình: 
- Central Server: Centos7 : 192.168.0.29
- Client #1: Centos7 - 192.168.0.100
- CLient #2: Debian - 192.168.0.101
Cài đặt bộ ELK trên Server.
Chúng ta hãy bắt đầu cài đặt bộ ELK trên Server.
- Elasticsearch: Lưu trữ các log được gửi đến từ Clients.
- Logstash: Xử lý các log này.
- Kiabana: Cung cấp giao diện web giúp chúng ta phân tích và kiểm tra các bản ghi nhật ký.
Cài đặt các gói dưới đây trên Central Server.
Đầu tiên chúng ta cài JDK version 8, đậy là sự phụ thuộc của các thành phần ELK,
- yum -y update
-  wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jre-8u131-linux-x64.rpm"
- rpm -Uvh jre*.rpm
- java -version

Enable Elasticsearch Repository

1. Import the Elasticsearch public GPG key to the rpm package manager:
# rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
2.Insert the following lines to the repository configuration file elasticsearch.repo:
[elasticsearch]
name=Elasticsearch repository
baseurl=http://packages.elastic.co/elasticsearch/2.x/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
3. Install the Elasticsearch package.
# yum install elasticsearch
4. Start and enable the service.
# systemctl daemon-reload
# systemctl enable elasticsearch
# systemctl start elasticsearch
5. Allow traffic through TCP port 9200 in your firewall:
# firewall-cmd --add-port=9200/tcp
# firewall-cmd --add-port=9200/tcp --permanent
6. Check if Elasticsearch responds to simple requests over HTTP:
# curl -X GET http://localhost:9200
Make sure you complete the above steps and then proceed with Logstash. Since both Logstash and Kibana share the Elasticsearch GPG key, there is no need to re-import it before installing the packages.

Enable Logstash Repository

7. Insert the following lines to the repository configuration file logstash.repo:
/etc/yum.repos.d/logstash.repo
[logstash]
name=Logstash
baseurl=http://packages.elasticsearch.org/logstash/2.2/centos
gpgcheck=1
gpgkey=http://packages.elasticsearch.org/GPG-KEY-elasticsearch
enabled=1
8. Install the Logstash package:
# yum install logstash
9. Add a SSL certificate based on the IP address of the ELK server at the the following line below the [ v3_ca ] section in /etc/pki/tls/openssl.cnf:
[ v3_ca ]
subjectAltName = IP: 192.168.0.29
Add Elasticsearch Server IP Address
Add Elasticsearch Server IP Address
10. Generate a self-signed certificate valid for 365 days:
# cd /etc/pki/tls
# openssl req -config /etc/pki/tls/openssl.cnf -x509 -days 3650 -batch -nodes -newkey rsa:2048 -keyout private/logstash-forwarder.key -out certs/logstash-forwarder.crt
11. Configure Logstash input, output, and filter files:
Input: Create /etc/logstash/conf.d/input.conf and insert the following lines into it. This is necessary for Logstash to “learn” how to process beats coming from clients. Make sure the path to the certificate and key match the right paths as outlined in the previous step:
/etc/logstash/conf.d/input.conf
input {
beats {
port => 5044
ssl => true
ssl_certificate => "/etc/pki/tls/certs/logstash-forwarder.crt"
ssl_key => "/etc/pki/tls/private/logstash-forwarder.key"
}
}
Output (/etc/logstash/conf.d/output.conf) file:
/etc/logstash/conf.d/output.conf
output {
elasticsearch {
hosts => ["localhost:9200"]
sniffing => true
manage_template => false
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}
ilter (/etc/logstash/conf.d/filter.conf) file. We will log syslog messages for simplicity:
/etc/logstash/conf.d/filter.conf
filter {
if [type] == "syslog" {
grok {
match => { "message" => "%{SYSLOGLINE}" }
}
date {
match => [ "timestamp", "MMM  d HH:mm:ss", "MMM dd HH:mm:ss" ]
}
}
}
12. Verify the Logstash configuration files.
# service logstash configtest
Verify Logstash Configuration
Verify Logstash Configuration
13. Start and enable logstash:
# systemctl daemon-reload
# systemctl start logstash
# systemctl enable logstash
14. Configure the firewall to allow Logstash to get the logs from the clients (TCP port 5044):
# firewall-cmd --add-port=5044/tcp
# firewall-cmd --add-port=5044/tcp --permanent

Enable Kibana Repository

14. Insert the following lines to the repository configuration file kibana.repo:
/etc/yum.repos.d/kibana.repo
[kibana]
name=Kibana repository
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
15. Install the Kibana package:
# yum install kibana
16. Start and enable Kibana.
# systemctl daemon-reload
# systemctl start kibana
# systemctl enable kibana
17. Make sure you can access access Kibana’s web interface from another computer (allow traffic on TCP port 5601):
# firewall-cmd --add-port=5601/tcp
# firewall-cmd --add-port=5601/tcp --permanent
18. Launch Kibana (http://192.168.0.29:5601) to verify that you can access the web interface:
Access Kibana Web Interface
Access Kibana Web Interface
We will return here after we have installed and configured Filebeat on the clients.

Install Filebeat on the Client Servers

We will show you how to do this for Client #1 (repeat for Client #2 afterwards, changing paths if applicable to your distribution).
1. Copy the SSL certificate from the server to the clients:
# scp /etc/pki/tls/certs/logstash-forwarder.crt root@192.168.0.100:/etc/pki/tls/certs/
2. Import the Elasticsearch public GPG key to the rpm package manager:
# rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
3. Create a repository for Filebeat (/etc/yum.repos.d/filebeat.repo) in CentOS based distributions:
/etc/yum.repos.d/filebeat.repo
[filebeat]
name=Filebeat for ELK clients
baseurl=https://packages.elastic.co/beats/yum/el/$basearch
enabled=1
gpgkey=https://packages.elastic.co/GPG-KEY-elasticsearch
gpgcheck=1
4. Configure the source to install Filebeat on Debian and its derivatives:
# aptitude install apt-transport-https
# echo "deb https://packages.elastic.co/beats/apt stable main" > /etc/apt/sources.list.d/filebeat.list
# aptitude update
5. Install the Filebeat package:
# yum install filebeat        [On CentOS and based Distros]
# aptitude install filebeat   [On Debian and its derivatives]

Configure Filebeat

A word of caution here. Filebeat configuration is stored in a YAML file, which requires strict indentation. Be careful with this as you edit /etc/filebeat/filebeat.yml as follows:
  1. Under paths, indicate which log files should be “shipped” to the ELK server.
  2. Under prospectors:
input_type: log
document_type: syslog
  1. Under output:
    1. Uncomment the line that begins with logstash.
    2. Indicate the IP address of your ELK server and port where Logstash is listening in hosts.
    3. Make sure the path to the certificate points to the actual file you created in Step I (Logstash section) above.
The above steps are illustrated in the following image:
Configure Filebeat in Client Servers
Configure Filebeat in Client Servers
Save changes, and then restart Filebeat on the clients:
# systemctl restart filebeat
Once we have completed the above steps on the clients, feel free to proceed.

Testing Filebeat

In order to verify that the logs from the clients can be sent and received successfully, run the following command on the ELK server:
# curl -XGET 'http://localhost:9200/filebeat-*/_search?pretty'
The output should be similar to (notice how messages from /var/log/messages and /var/log/secure are being received from client1 and client2):
Testing Filebeat
Testing Filebeat
Otherwise, check the Filebeat configuration file for errors.
# journalctl -xe
after attempting to restart Filebeat will point you to the offending line(s).

Testing Kibana

After we have verified that logs are being shipped by the clients and received successfully on the server. The first thing that we will have to do in Kibana is configuring an index pattern and set it as default.
You can describe an index as a full database in a relational database context. We will go with filebeat-*(or you can use a more precise search criteria as explained in the official documentation).
Enter filebeat-* in the Index name or pattern field and then click Create:
Testing Kibana
Testing Kibana
Please note that you will be allowed to enter a more fine-grained search criteria later. Next, click the star inside the green rectangle to configure it as the default index pattern:
Configure Default Kibana Index Pattern
Configure Default Kibana Index Pattern
Finally, in the Discover menu you will find several fields to add to the log visualization report. Just hover over them and click Add:
Add Log Visualization Report
Add Log Visualization Report
The results will be shown in the central area of the screen as shown above. Feel free to play around (add and remove fields from the log report) to become familiar with Kibana.
By default, Kibana will display the records that were processed during the last 15 minutes (see upper right corner) but you can change that behavior by selecting another time frame:
Kibana Log Reports
Kibana Log Reports

Summary

In this article we have explained how to set up an ELK stack to collect the system logs sent by two clients, a CentOS 7 and a Debian 8 machines.
Now you can refer to the official Elasticsearch documentation and find more details on how to use this setup to inspect and analyze your logs more efficiently.
If you have any questions, don’t hesitate to ask. We look forward to hearing from you.
a