ELK 更多的是用于做系統(tǒng)和應(yīng)用層的監(jiān)控匈棘, 網(wǎng)工用ELK的較少落剪,最近把幾百臺(tái)交換機(jī)的syslog,通過python腳本檀葛,全部指向了elk,這里整理一下ELK相關(guān)的配置。
一: 功能描述
ELK的功能這里簡(jiǎn)單描述一下腹缩, 具體的描述請(qǐng)參考google 或百度描述屿聋。
L:? logstash? :ELK的最后端工具空扎, 用來收集日志, 然后根據(jù)自定義的規(guī)則對(duì)收集到的日志信息進(jìn)行切片之類的操作润讥,使信息統(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)一收集匯總起來,然后按照某些規(guī)則進(jìn)行分類脆粥,進(jìn)行適當(dāng)?shù)臉?biāo)準(zhǔn)化和統(tǒng)一化砌溺,在這一基礎(chǔ)上, Elasticsearch才能完成下一步工作变隔。
2: elasticsearch? ELK的夾心層规伐, 本質(zhì)就是用來提供搜索功能。 試想當(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? 來完成自已的功能了。
3: K: kibana, ELK 的最前臺(tái)夏哭, 前臺(tái)展示工具检柬。 L 完成了日志功能存儲(chǔ)分類, E負(fù)責(zé)搜索日志竖配, 那在哪里執(zhí)行搜索呢何址? 這就需要Kibanan來提供一個(gè)人性化的web前臺(tái)了。 通過web來對(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í)間颇玷,這樣解決了 所有客戶端時(shí)間不準(zhǔ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)前通過yum安裝的版本為7鄙漏,半年后,通過yum安裝的版本為7.6,相關(guān)配置可能就會(huì)產(chǎn)生變化棺蛛, 出現(xiàn)了問題又要重新排查怔蚌, 本次部署了兩臺(tái)服務(wù)器, 分別在兩地旁赊,因此采用tar包安裝桦踊。
另外, ELK 之間必須有版本匹配關(guān)系终畅, 比如說E你用的是version7, 但logstash用版本6籍胯,則無法完成安裝對(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用戶
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用戶啟動(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有沒有正確安裝啟動(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即可支持中文挪圾,無需漢化。
./bin/kibana -l /apps/product/kibana-6.2.2-linux-x86_64/logs/kibana.log & # 自己創(chuàng)建一個(gè)logs目錄用來記錄日志
logs/kibana.log? ?這個(gè)目錄及文件默認(rèn)是沒有国拇, 需要手動(dòng)創(chuàng)建洛史。
用http:xxxx:5601即可打開惯殊。
在交換機(jī)上酱吝,配置log info-center之類的, 把交換機(jī)的日志打過來土思,略务热。
配置kiabana:
搞一個(gè)索引出來:
只要你交換機(jī)或其他syslog正常吐到elk上忆嗜, 則可以看到類似下圖:
index 輸入?sysl*? ?, 下一步即可崎岂。
日志量排序: