Sử dụng zabbix theo dõi thông tin metric của cluster hadoop

Yêu cầu:

  • Monitor đc các thông số cơ bản của cluster hadoop:
    • Số lượng app được submit
    • Số app đang chạy
    • Số app đang pending
    • Số memory: total, used
    • Số Vcore: Total, used
    • Node: số node, số node bị mất, số node có trạng thái unhealthy

Thực hiện:

  • Có thể xem các con số trên tại trang running custer của resource manager:

  • Ngoài ra, còn có thể sụng API để lấy các con số này:

Dưới đây là script thực hiện lấy các giá trị:

Apps Submitted
Apps Pending
Apps Running
Memory Used

Memory Total

VCores Used

VCores Total

Active Nodes

lostNodes

unhealthyNodes

totalNodes

Các giá trị này để gửi tới zabbix để xây dựng biểu đồ, và lưu trữ, thiết lập cảnh báo.

Dưới đây là script lấy số liệu:

#!/bin/bash
echo "appsSubmitted
appsPending

appsRunning

allocatedMB

totalMB

allocatedVirtualCores

totalVirtualCores

activeNodes

lostNodes

unhealthyNodes

totalNodes" > /tmp/readkey

curl -s -H "Content-Type: application/xml" http://c2s-spk06:8088/ws/v1/cluster/metrics http://c2s-spk07:8088/ws/v1/cluster/metrics > /tmp/input

IFS=$'\n'

for i in `cat /tmp/readkey`;do

a=`egrep -o "${i}\":[0-9]+" /tmp/input | awk -F':' '{print $2}'`

echo "$HOSTNAME yarn.metric.$i $a"

done

 

Output có dạng:

c2s-spk06 yarn.metric.appsSubmitted 443
c2s-spk06 yarn.metric.appsPending 0
c2s-spk06 yarn.metric.appsRunning 25
c2s-spk06 yarn.metric.allocatedMB 265216

c2s-spk06 yarn.metric.totalMB 307200

c2s-spk06 yarn.metric.allocatedVirtualCores 131

c2s-spk06 yarn.metric.totalVirtualCores 320

c2s-spk06 yarn.metric.activeNodes 5

c2s-spk06 yarn.metric.lostNodes 0

c2s-spk06 yarn.metric.unhealthyNodes 0

c2s-spk06 yarn.metric.totalNodes 5

Thiết lập đặt vào cron của máy hadoop, chạy 10 phút 1 lần, và đẩy output cho zabbix sender xử lý, gửi tới zabbix server, chi tiết cú pháp xem help của zabbix sender.

*/10 * * * * /bin/bash GetClusterMetricSpark.sh | /usr/local/zabbix/bin/zabbix_sender -i - -z ws-zbx

 

Các thông số của CPU trên linux

Các thông số của CPU khi sử dụng lệnh top
Cpu(s): 0.1%us, 0.2%sy, 0.0%ni, 99.7%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
0.1%us CPU đang sử dụng 0.1% năng lực xử lý cho running user space processes, tức các tiến trình không thuộc về hoạt động của kernel như shell, các trình biên dịch, database, webserver, và các chương trình khác. Nếu CPU không ở trạng thái nghỉ, idle thì thường phần lớn năng lực của nó đang dùng cho các tiến trình user như thế này.

99.7%id Con số này nói cho chúng ta biết, CPU dành 99.7% thời gian của nó để nghỉ ngơi trong lần lấy mẫu gần nhất, không có gì để làm. Tổng của các con số us, id, ni càng gần 100% càng tốt, nếu không, có lẽ có gì đó sai sai đang xảy ra.
0.2%sy Con số này là lượng thời gian mà CPU dành cho xử lý của kernel, tất cả các process và tài nguyên hệ thống được phụ trách bởi linux kernel. Khi các tiến trình của người dùng (user space processes) cần cái gì đó từ hệ thống như xin cấp phát bộ nhớ, đọc ghi, tạo thêm tiến trình con, thì kernel sẽ làm những việc này. Trong thực tế, kernel sẽ tự đặt lịch, quyết định tiến trình nào sẽ chạy trước, cái nào chạy sau. Con số CPU dành cho phần này càng ít càng tốt, nếu nhiều hơn, có lẽ có vấn đề gì đó như I/O đang tăng cao quá mức.
0.0%ni Con số này phần trăm CPU sử dụng để thay đổi độ ưu tiên các process.
0.0%wa Con số thể hiện %CPU đang dành cho việc ngồi đợi I/O
0.0%hi Con số thể hiện %CPU dùng cho việc xử lý phần cứng bị gián đoạn. Phần cứng gián đoạn từ nhiều phạm vi khác nhau như ổ đĩa lởm, đường truyền mạng tậm tịt, etc, gây ra gián đoạn những gì CPU đang xử lý.
0.0%si Con số thể hiện %CPU dùng cho việc xử lý khi có phần mềm bị gián đoạn. Không thường xảy ra ở mức CPU, thường xảy ra từ lớp kernel trở lên.
0.0%st COn số này dành cho các máy chủ ảo, khi linux chạy trong máy ảo, trên lớp hypervisor, số st ( short for stolen) thể hiện bao nhiêu CPU đã sử dụng để đợi thằng hypervisor, khi nó phục vụ tài nguyên cho các con CPU khác. Con số này bắt nguồn từ thực tế rằng, có nhiều processor ảo dùng chung processor vật lý với nhau.

Một số vấn đề với các con số trên: (để nguyên tiếng anh)

High user mode – If a system suddenly jumps from having spare CPU cycles to running flat out, then the first thing to check is the amount of time the CPU spends running user space processes. If this is high then it probably means that a process has gone crazy and is eating up all the CPU time. Using the top command you will be able to see which process is to blame and restart the service or kill the process.

High kernel usage – Sometimes this is acceptable. For example a program that does lots of console I/O can cause the kernel usage to spike. However if it remains higher for long periods of time then it could be an indication that something isn’t right. A possible cause of such spikes could be a problem with a driver/kernel module.

High niced value – If the amount of time the CPU is spending running processes with a niced priority value jumps then it means that someone has started some intensive CPU jobs on the system, but they have niced the task.
If the niceness level is greater than zero then the user has been courteous enough lower to the priority of the process and therefore avoid a CPU overload. There is probably little that needs to be done in this case, other than maybe find out who has started the process and talk about how you can help out!
But if the niceness level is less than 0, then you will need to investigate what is happening and who is responsible, as such a task could easily cripple the responsiveness of the system.

High waiting on I/O – This means that there are some intensive I/O tasks running on the system that don’t use up much CPU time. If this number is high for anything other than short bursts then it means that either the I/O performed by the task is very inefficient, or the data is being transferred to a very slow device, or there is a potential problem with a hard disk that is taking a long time to process reads & writes.

High interrupt processing – This could be an indication of a broken peripheral that is causing lots of hardware interrupts or of a process that is issuing lots of software interrupts.

Large stolen time – Basically this means that the host system running the hypervisor is too busy. If possible, check the other virtual machines running on the hypervisor, and/or migrate to your virtual machine to another host.

Tìm hiểu về 2 chế độ active và passive của FTP

  • Giới thiệu 

Active và Passive FTP: Đây là 2 chế độ hoạt động của FTP server. Bài viết này sẽ giải thích về sự ảnh hưởng khác nhau của Firewall lên 2 chế độ Active và Passive. Bài viết này được viết theo kinh nghiệm của mình.

  • Cơ bản FTP Service

FTP chỉ sử dụng TCP để truyền tải, FTP server sẽ listen trên 2 port 20 và 21, sử dụng port 21 để xác thực, điều khiển ( gọi là control port) và Port 20 để truyền tải dữ liệu ( data Port ). Nhưng data port không hẳn luôn luôn là 20 mà nó phụ thuộc vào FTP mode. Sau khi đọc xong hết bài viết các bạn sẽ hiểu được điều này.

  • Active FTP

Active FTP thì client sẽ đi tới FTP server bằng 1 port ngẫu nhiên unprivileged port ( là port có số lớn hơn 1023 ), sau đây sẽ gọi là port S, để connect tới port command trên server là port 21. Sau đó Client sẽ listen trên port S+1 và gửi command port “port S+1” cho thằng server: tao đang chờ mày ở port S+1. FTP server sẽ connect tới port S+1 của Client bằng data port mặt định của nó là port 20.

Hình ví dụ minh họa cho Active FTP mode.


Ở bước 1, từ command port 1026 Client kết nối tới command port 21 của Server và gửi command port PORT 1027. Server gửi gói tin ACK (hiểu đơn giản là chấp nhận ) về cho Client ở bước 2. Bước 3 Server khởi tạo kết nối từ port data 20 tới port 1027 của Client ( port 1027 là port Client gửi cho Server ở bước 1 ). Và cuối cùng là Client gửi gói tin ACK về cho Server.

Vấn đề chính gặp phải khi sử dụng Active FTP là có thể bị mất kết nối ở phía Client. Client không khởi tạo kết nối tới port data của Server mà nó đơn giản chỉ nói với Server là tôi đang lắng nghe trên port 1027 và chờ Server kết nối tới. Nếu có tồn tại Firewall đứng trước Client thì có thể thằng client listen port 1027 chờ server gửi dữ liệu nhưng bị firewall ở ngoài chặn mất.

  • Passive FTP

Thay vì tập trung giải quyết vấn đề bị firewall chặn ở Active mode, thì một different method (một phương thức kết nối mới cho FTP ) for FTP connections được xây dựng. đó là Passive mode.

Trong passive mode FTP Client khởi tạo 2 connections đến Server, như vậy là giải quyết được vấn đề bên phía Client Blocked connection từ Server đến data port của Client. Passive mode hoạt động như sau.

Khi khởi tạo kết nối thì Client mở 2 ports random unprivileged port local (N > 1023 and N+1 ). Port đầu tiên Client mở connect tới port 21 của Server. Nhưng thay thì gửi PORT command như ở Active mode thì Client sẽ gửi câu lệnh PASV command. Lúc đó Server sẽ khởi tạo a random unprivileged port ( P > 1023)
và gửi P đến Client trong cái response PASV command. Lúc này Client khởi tạo connection từ port N+1 của nó tới port P trên Server và transfer data.


Tại Step 1. Client liên lạc với Server trên command port và đưa ra câu lệnh PASV. Server trả lời ở Step 2 với PORT 1024 và nói với Client đây là port dữ liệu tối đang lắng nghe. Step 3 Client khởi tạo data connection từ port Data của nó tới port 1024 mà Server đã gửi cho nó. Cuối cùng là Server gửi lại gói tin ACK chấp nhận.

Với Passive mode ta giải quyết được nhiều vấn đề ở phía Client, nhưng nó đã mở ra một range port lớn tạo nên các lổ hỏng nguy hiểm cho phía Server. Vấn đề lớn nhất ở đây là phải chấp nhận hầu hết các kết nối port > 1023 trên Server

Vì lý do này nên hầu hết các FTP Service đều được khai báo một range port nhất định, để dễ dàng Control hơn. và tránh rũi ro.

Vấn đề lớn thứ 2 là phía Client không hổ trợ Passive Mode. Ví Dụ như nếu ai sài Solaris thì commandline FTP không hổ trợ cơ chế Passive này mà phải sử dụng FTP software client của hãng khác. ví dụ như ncftp.

Một số lượng lớn người dùng sử dụng Browser (Trình duyệt) của mình để đăng nhập vào FTP server. và trên Browser chỉ hổ trợ Passive mode.

  • Một chú ý khác.

Active FTP Mode không thể hoạt động được với mô hình Client-side NAT Device. Vì thiết bị này không có khả năng thay thế thông tin IP trong FTP Packets.

  • Tổng hợp 

Dưới đây là một biểu đồ nhỏ để giúp chúng ta nhớ được 2 mode FTP trên.

Active FTP :
command : client >1023 –> server 21
data : client >1023 <– server 20

Passive FTP :
command : client >1023 –> server 21
data : client >1024 –> server >1023

Như vậy, với Active FTP thì có lợi cho FTP Server admin, nhưng lại ảnh hưởng tới Client side. Server tạo connetion tới random hight ports trên Client. Có thể sẽ bị Firewall Client Side Blocked. Còn với Passive FTP thì có lợi cho phía Client nhưng thiệt bên FTP Server admin. Client khởi tạo 2 kết nối tới Server với Hight Ports có thể sẽ bị Server Blocked.

Tuy vậy nhưng với kinh nghiệm và hiểu biết của mình thì nếu Support cho một hệ thống với nhiều truy cập FTP từ Client. thì Nên setup Passive mode. Việc Control trên một Server để giúp tất cả Client có thể connect tới thì dễ hơn là việc Control trên Firewall của Từng Client Side.

Hướng dẫn cài đặt VNC server trên centos


Để sử dụng GUI từ xa của centos, có thể dùng VNC server, sau đây là hướng dẫn:

Lệnh cài đặt:
yum install tigervnc-server -y
chkconfig vncserver on

VNC sử dụng chính user của hệ điều hành, nên cần thêm user thì chỉ cần dùng lệnh useradd như bình thường, tuy nhiên, password thì VNC dùng password riêng. Để đặt password, ví du cho user huybk thì cần:
su - huybk
vncpasswd

Thêm dòng cấu hình vào file: vi /etc/sysconfig/vncservers
VNCSERVERS="1:huybk"
VNCSERVERARGS[1]="-geometry 1280x768"

Khởi động lại service vnc để cấu hình có hiệu lực
service vncserver restart

Phía client: Truy cập http://tigervnc.bphinz.com/nightly/ để download bản vnc client phù hợp
kết nối tới server mới cài ở địa chỉ
IP server:5901

Print Spooler Error code 3. The system cannot find the path specified

Xử lý lỗi:

Print Spooler Error code 3. The system cannot find the path specified

Không thể start service print spooler, báo lỗi như trên, mở properties của service thì thấy execute path không có gì. Có thể xử lý như sau:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\Spooler registry key and right-click Spooler > New > Expandable String Value > then name the value ImagePath then double-click ImagePath and type (or copy and paste) the following under "Value data":

%SystemRoot%\System32\spoolsv.exe

Then press "OK"

Close regedit and see if you can start the Print Spooler service.

Returning Blanks with VLOOKUP

When you use VLOOKUP to return a value from a data table, the function does not differentiate between blanks and zero values in what it returns. If the source value is zero, then VLOOKUP returns 0. Likewise, if the source is blank, then VLOOKUP still returns the value 0. For some purposes, this may not do—you need to know whether the cell being looked up is blank or if it really contains a 0.

There are many different solutions that could be pursued. One solution relies on the fact that even though VLOOKUP returns a 0, it will correctly report the length of the source cell. Thus, if you use the LEN function on what is returned, if the source cell is empty the LEN function returns 0, but if the source contains a 0 then LEN returns 1 (the 0 value is 1 character in length). This means that you could use the following formula in place of a standard VLOOKUP:

=IF(LEN(VLOOKUP(B1,D:E,2,0))=0,””,VLOOKUP(B1,D:E,2,0))

In this case if the length of what VLOOKUP returns is 0, then Excel doesn’t actually do a lookup—it forces a blank to be returned. Only if the length is not 0 is the actual VLOOKUP performed.

There are other variations on this same concept, each testing a different characteristic of the data being referenced and then making the decision as to whether to actually look up that data. This variation, for example, directly tests to see if the source is blank:

=IF(VLOOKUP(B1,D:E,2)=””,””,VLOOKUP(B1,D:E,2))

The formula can also be modified to check the source cell for multiple conditions. For instance, this variation returns a blank if the source is blank or if the source contains an #N/A error:

=IF(ISNA(VLOOKUP(B1,D:E,2,0))+(VLOOKUP(B1,D:E,2,0)=””)

,””,VLOOKUP(B1,D:E,2,0))

Sử dụng docker – Ghi đè entrypoint mặc định của container với docker run

Entrypoint là những command mặc định, được chạy lần đầu khi khởi tạo container từ image. Entrypoint được định nghĩa ban đầu trong dockerfile. Tuy nhiên, đôi khi người quản trị muốn chạy cái gì đó khác bên trong container, vì vậy, có thể ghi đè ENTRYPOINT mặc định mỗi lần start container bởi tham số –entrypoint
Ví dụ,chạy ls khi start container
docker run --entrypoint "/bin/ls" 0cbf37812bff
Xoá toàn bộ container mặc định:
docker run -it –entrypoint=”” 0cbf37812bff
Tham số –entrypoint sẽ xoá toàn bộ entrypoint hiện có, và thêm entrypoint mới. Như ở lệnh trên, entrypoint mới rỗng nên những cái hiện có sẽ bị remove toàn bộ.

Tuy nhiên, nếu command có tham số (args) thì cú pháp sử dụng sẽ khác. Dưới đây là cách sử dụng sai:
[root@localhost ~]# docker run --entrypoint "/bin/ls -al /root" 0cbf37812bff

container_linux.go:247: starting container process caused "exec: \"/bin/ls -al /root\": stat /bin/ls -al /root: no such file or directory"
/usr/bin/docker-current: Error response from daemon: oci runtime error: container_linux.go:247: starting container process caused "exec: \"/bin/ls -al /root\": stat /bin/ls -al /root: no such file or directory".

Để sử dụng tham số cho entrypoint, thêm tham số đằng sau image_id/ image_name
Ví dụ, chạy lệnh ls với thư mục /var
[root@localhost ~]# docker run --entrypoint "/bin/ls" 0cbf37812bff /var
cache
db
empty
games
lib
local
lock
log
mail
nis
opt
preserve
run
spool
tmp
yp
[root@localhost ~]#

Xử lý lỗi docker – WARNING: IPv4 forwarding is disabled. Networking will not work.


Tạo container docker thì được thông báo:

WARNING: IPv4 forwarding is disabled. Networking will not work.

Nguyên nhân do hệ điều hành host đangtawts IP forwarding, để bật lên, thêm/sửa dòng sau trong /etc/sysctl.conf
net.ipv4.ip_forward=1

Sau đó restart network, hoặc chạy lệnh
sysctl -p

Sử dụng docker – Tạo một container


Để có contaner, trước hết cần có image, tương tự như cài windows thì phải có đĩa vậy. Image của docker có thể được lấy tự động từ docker hub (mặc định) hoặc từ docker registry nội bộ của doanh nghiệp. Để lấy docker image về, sử dụng cú pháp:
docker pull
Ví dụ: Muốn lấy image của centos 6 về máy:
docker pull centos:6
List các image trên máy:
docker images
Output:
[root@localhost data]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos 6 0cbf37812bff 3 months ago 194 MB
docker.io/centos/systemd latest 78c36a71df7e 6 months ago 200 MB

Cú pháp:
docker run

Ví dụ: tạo container từ image centos 6 ở trên
docker run -it 0cbf37812bff
Nếu thành công sẽ truy cập vào màn hình bên trong container, tiếp theo có thể tiến hành cài app như 1 máy bình thường. Để quay lại màn hình máy bên ngoài (màn hình máy host), bấm Ctrl P và Ctrl Q
Các tham số option khi tạo container sẽ được giới thiệu ở bài sau.

Sử dụng docker – Các khái niệm cơ bản

Khái niệm

Docker – là một công cụ tạo môi trường được đóng gói (Container) 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, được gọi là container. 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 chạy được trên mọi máy tính, đám mây hay bất cứ nền tảng nào. Vì vậy bạn có thể đẩy ứng dụng đến bất cứ đâu mà không cần phải quan tâm đến môi trường đích như thế nào …

Image

Image chỉ đơn giản là một file thông thường, trong file này có chứa sẵn các chương trình cần thiết để khởi tạo một môi trường nào đó. Ví dụ Image apache thì trong đó đã có sẵn apache kèm theo một số chương trình tiện ích để thao tác với apache. Image php đã chứa sẵn php kèm theo một số chương trình tiện ích… Chiếu theo các đặc điểm này, chúng ta có thể coi Image là một cái khuôn. Và khuôn này được dùng để “đúc” ra các Container. Nói cách khác, Image được sử dụng để khởi tạo ra một hay nhiều Container. Sau đó, các Container này được cấu hình như thế nào cũng không làm ảnh hưởng tới Image ban đầu.
Nếu so sánh với ảo hoả, thì một image có thể tương đương với một file ISO, container tương đương với VM

Container

Có rất nhiều process được thực thi trong một HĐH, các process này đều dùng chung một nguồn tài nguyên từ OS và các process này đều có thể truy cập được vào dữ liệu của các process khác. Trong trường hợp chúng ta muốn chạy một hay nhiều process trên một môi trường tách biệt hoàn toàn với HĐH, chúng ta cần phải khởi tạo một loại môi trường gọi là sandbox environment. Sandbox environment chỉ đơn giản là khái niệm chỉ một loại môi trường quản lý các process hoàn toàn tách biệt với môi trường máy Host. Sandbox cho phép chúng ta giới hạn quyền truy cập và tài nguyên sử dụng của các process.
Container chính là một ví dụ cụ thể của sandbox environment. Về cơ bản Container gom các tiến trình bên trong nó và thực thi tách biệt với các process của Host OS. Docker sử dụng cơ chế namespaces và control groups để tạo ra cơ chế quản lý Container.

Registry

Registry là một thư viện lưu trữ các Images được build sẵn từ các nhà phát triển. Docker cung cấp cho chúng ta một Registry có địa chỉ tại https://hub.docker.com.