ELK&H3c監(jiān)控篇

ELK 更多的是用于做系統(tǒng)和應(yīng)用層的監(jiān)控, 網(wǎng)工用ELK的較少,最近把幾百臺(tái)交換機(jī)的syslog,通過(guò)python腳本,全部指向了elk,這里整理一下ELK相關(guān)的配置。

一: 功能描述

ELK的功能這里簡(jiǎn)單描述一下, 具體的描述請(qǐng)參考google 或百度描述。

L:? logstash? :ELK的最后端工具, 用來(lái)收集日志, 然后根據(jù)自定義的規(guī)則對(duì)收集到的日志信息進(jìn)行切片之類(lèi)的操作,使信息統(tǒng)一化標(biāo)準(zhǔn)化。?

? ? ? ?在實(shí)際工作中, 比如你可以將apache的日志發(fā)送給ELK服務(wù)器的logstash,也可以將交換機(jī)的syslog發(fā)送給logstash,也可以將其他應(yīng)用的log日志發(fā)送給logstash. 很明顯,交換機(jī)的syslog和apache的log 的格式和關(guān)鍵字是不相同的, logstash在這里的功能就是將這些風(fēng)格迥異的日志統(tǒng)一收集匯總起來(lái),然后按照某些規(guī)則進(jìn)行分類(lèi),進(jìn)行適當(dāng)?shù)臉?biāo)準(zhǔn)化和統(tǒng)一化,在這一基礎(chǔ)上, Elasticsearch才能完成下一步工作。


2: elasticsearch? ELK的夾心層, 本質(zhì)就是用來(lái)提供搜索功能。 試想當(dāng)海量的服務(wù)器和交換機(jī),以及大量應(yīng)用的日志全部吐到ELK服務(wù)器上, 由logstash統(tǒng)一存儲(chǔ)了, 現(xiàn)在你想 根據(jù)某一個(gè)關(guān)鍵字, 比如error,? 你想看到所有? 包含? “error” .這一關(guān)鍵字的所有日志,這個(gè)時(shí)候需要的就是E? 來(lái)完成自已的功能了。

3: K: kibana, ELK 的最前臺(tái), 前臺(tái)展示工具。 L 完成了日志功能存儲(chǔ)分類(lèi), E負(fù)責(zé)搜索日志, 那在哪里執(zhí)行搜索呢? 這就需要Kibanan來(lái)提供一個(gè)人性化的web前臺(tái)了。 通過(guò)web來(lái)對(duì)日志進(jìn)行展示和分析。

本次安裝ELK只為了收集交換機(jī)日志, 幾百臺(tái)交換機(jī)的日志對(duì)于服務(wù)器的要求并不高,所以本次部署,ELK全部基于一臺(tái)服務(wù)器完成。

二: 安裝

CentOS Linux release 7.6.1810 (Core)

準(zhǔn)備工作:

1:基礎(chǔ)軟件安裝:

yum install wget lrzsz unzip

cd /etc/yum.repos.d/

wgethttp://mirrors.163.com/.help/CentOS7-Base-163.repo

mv CentOS-Base.repo CentOS-Base.repo.bak

mv CentOS7-Base-163.repo CentOS-Base.repo

yum clean all && yum makecache? && yum update

yum install vim net-tools bash-completion wget unzip ntp bzip2 lrzsz -y

2:時(shí)區(qū)設(shè)置,kibana前臺(tái)展示的日志時(shí)間, 會(huì)有本機(jī)時(shí)間,這樣解決了 所有客戶(hù)端時(shí)間不準(zhǔn)的問(wèn)題。

timedatectl set-timezone Asia/Shanghai

ntpdate pool.ntp.org

3: 關(guān)閉Selinx . 必須不解釋。

sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config

4:關(guān)閉FW, 這個(gè)因人而異。

systemctl stop firewalld.service

systemctl disable firewalld.service

5:改主機(jī)名。

vi /etc/hostname


6、修改系統(tǒng)文件描述符大小,必須改。

vim /etc/security/limits.conf



7、修改?vm.max_map_count值

vim /etc/sysctl.conf

最后添加:

vm.max_map_count = 655360

8:

安裝java支持:

unzip jdk-11.0.2_linux-x64_bin.rar

rpm -ivh? jdk-11.0.2_linux-x64_bin.rpm

reboot

本次安裝不使用yum安裝, 原因在于后續(xù)的可復(fù)制性,如采用yum 安裝, 假設(shè)當(dāng)前通過(guò)yum安裝的版本為7,半年后,通過(guò)yum安裝的版本為7.6,相關(guān)配置可能就會(huì)產(chǎn)生變化, 出現(xiàn)了問(wèn)題又要重新排查, 本次部署了兩臺(tái)服務(wù)器, 分別在兩地,因此采用tar包安裝。

另外, ELK 之間必須有版本匹配關(guān)系, 比如說(shuō)E你用的是version7, 但logstash用版本6,則無(wú)法完成安裝對(duì)接。

安裝ELA:

groupadd elasticsearch

useradd elasticsearch -g elasticsearch

tar -zxf elasticsearch-7.1.1-linux-x86_64.tar.gz

mv elasticsearch-7.1.1 elasticsearch

4、將elasticsearch目錄授權(quán)給elasticsearch用戶(hù)

chown -R elasticsearch:elasticsearch /opt/elasticsearch

5、修改elasticsearch配置文件

vim /opt/elasticsearch/config/elasticsearch.yml

修改配置文件有一點(diǎn)比較重要,你修改的內(nèi)容的每行,前面必須有一個(gè)空格, 否則會(huì)報(bào)錯(cuò)。

改的內(nèi)容如下:

cluster.name: elk-master

node.name: node-1

path.data: /opt/elasticsearch/data

path.logs: /opt/elasticsearch/data

network.host: 192.168.1.165

其它網(wǎng)站改的內(nèi)容參考如下:

bootstrap.memory_lock: true ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 是否允許內(nèi)存swapping

discovery.zen.ping.unicast.hosts: ["IP", "IP", "IP"]? ? ? ? ? ? # 服務(wù)發(fā)現(xiàn),集群中的主機(jī)

discovery.zen.minimum_master_nodes: 2? ? ? ? ? ? ? ? ? ? ? ? ? # 決定了有資格作為master的節(jié)點(diǎn)的最小數(shù)量,官方推薦N/2 + 1

gateway.recover_after_nodes: 3? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # 少于三臺(tái)的時(shí)候,recovery

6、切換到elasticsearch用戶(hù)啟動(dòng)elasticsearch

?su - elasticsearch

/opt/elasticsearch/bin/elasticsearch -d

可以先 /opt/elasticsearch/bin/elasticsearch 看啟動(dòng)報(bào)錯(cuò)


安裝logstash:

tar -zxf logstash-7.1.1.tar.gz

mv logstash-7.1.1 logstash

啟動(dòng)logstash:

看一下logstash有沒(méi)有正確安裝啟動(dòng):

bin/logstash -e 'input { stdin {} } output { stdout{} }'


掛載sw.conf文件, 并啟動(dòng)logstash,收集syslog日志:


/opt/logstash/bin/logstash -f /opt/logstash/config/sw.conf &

sw.conf如下:

input{

? ? tcp {port =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5002 type =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "Cisco"}

? ? udp {port =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 514 type =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "HUAWEI"}

? ? udp {port =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5002 type =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "Cisco"}

? ? udp {port =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 5003 type =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "H3C"}

}

filter {

? ? if [type] ==

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "Cisco"{

? ? grok{

? ? match => { "message"

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "<%{BASE10NUM:syslog_pri}>%{NUMBER:log_sequence}: .%{SYSLOGTIMESTAMP:timestamp}: %%{DATA:

facility}-%{POSINT:severity}-%{CISCO_REASON:mnemonic}: %{GREEDYDATA:message}" }

? ? match => { "message"

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "<%{BASE10NUM:syslog_pri}>%{NUMBER:log_sequence}: %{SYSLOGTIMESTAMP:timestamp}: %%{DATA:f

acility}-%{POSINT:severity}-%{CISCO_REASON:mnemonic}: %{GREEDYDATA:message}" }

? ? add_field => {"severity_code"

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "%{severity}"}

? ? overwrite => ["message"]

? ? }? ?

}

? ? else

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if [type] ==

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "H3C"{

? ? grok {

? ? match => { "message"

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "<%{BASE10NUM:syslog_pri}>%{SYSLOGTIMESTAMP:timestamp} %{YEAR:year} %{DATA:hostname} %%%{

DATA:vvmodule}/%{POSINT:severity}/%{DATA:digest}: %{GREEDYDATA:message}" }

? ? remove_field => [ "year" ]

? ? add_field => {"severity_code"

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "%{severity}"}

? ? overwrite => ["message"]

? ? }

}

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? else

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? if [type] ==

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "HUAWEI"{

? ? grok {

? ? ? match => { "message"

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "<%{BASE10NUM:syslog_pri}>%{SYSLOGTIMESTAMP:timestamp} %{DATA:hostname} %%%{DATA:ddModule

Name}/%{POSINT:severity}/%{DATA:Brief}:%{GREEDYDATA:message}"}

? ? ? match => { "message"

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "<%{BASE10NUM:syslog_pri}>%{SYSLOGTIMESTAMP:timestamp} %{DATA:hostname} %{DATA:ddModuleNa

me}/%{POSINT:severity}/%{DATA:Brief}:%{GREEDYDATA:message}"}

? ? ? remove_field => [ "timestamp" ]

? ? add_field => {"severity_code"

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "%{severity}"}

? ? overwrite => ["message"]

? ? }

}

mutate {

? ? ? ? gsub => [

? ? ? ? "severity", "0", "Emergency",

? ? ? ? "severity", "1", "Alert",

? ? ? ? "severity", "2", "Critical",

? ? ? ? "severity", "3", "Error",

? ? ? ? "severity", "4", "Warning",

? ? ? ? "severity", "5", "Notice",

? ? ? ? "severity", "6", "Informational",

? ? ? ? "severity", "7", "Debug"

? ? ? ? ]

? ? }

}

output{

? ? elasticsearch {

? ? ? ? index =>

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? "syslog-%{+YYYY.MM.dd}"

? ? ? ? hosts => ["192.168.1.165:9200"]

? ? }

}


安裝kibana:

tar -xzf kibana-7.1.1-linux-x86_64.tar.gz

版本號(hào)需要和Elasticsearch 相同

mv kibana-7.1.1-linux-x86_64 kibana

2.? 修改配置文件 kibana.yml

server.port: 5601? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # Kibana端口號(hào)

server.host: "IP"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # KibanaIP

elasticsearch.url: "http://esIP:port"? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? # es的IP地址及端口號(hào)

server.port: 5601

server.host: "192.168.1.165"

server.name: "elk-master"

elasticsearch.hosts: ["http://192.168.1.165:9200"]

elasticsearch.username: "root"

elasticsearch.password: "passsssworddddd"


i18n.locale: "zh-CN"? ?最后一行改一下, kibana即可支持中文,無(wú)需漢化。

./bin/kibana -l /apps/product/kibana-6.2.2-linux-x86_64/logs/kibana.log &                    # 自己創(chuàng)建一個(gè)logs目錄用來(lái)記錄日志


logs/kibana.log? ?這個(gè)目錄及文件默認(rèn)是沒(méi)有, 需要手動(dòng)創(chuàng)建。

用http:xxxx:5601即可打開(kāi)。


在交換機(jī)上,配置log info-center之類(lèi)的, 把交換機(jī)的日志打過(guò)來(lái),略。

配置kiabana:





第一步

搞一個(gè)索引出來(lái):

只要你交換機(jī)或其他syslog正常吐到elk上, 則可以看到類(lèi)似下圖:



index 輸入?sysl*? ?, 下一步即可。

日志量排序:




最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容