ELK 更多的是用于做系统和应用层的监控, 网工用ELK的较少,最近把几百台交换机的syslog,通过python脚本,全部指向了elk,这里整理一下ELK相关的配置。
一: 功能描述
ELK的功能这里简单描述一下, 具体的描述请参考google 或百度描述。
L: logstash :ELK的最后端工具, 用来收集日志, 然后根据自定义的规则对收集到的日志信息进行切片之类的操作,使信息统一化标准化。
在实际工作中, 比如你可以将apache的日志发送给ELK服务器的logstash,也可以将交换机的syslog发送给logstash,也可以将其他应用的log日志发送给logstash. 很明显,交换机的syslog和apache的log 的格式和关键字是不相同的, logstash在这里的功能就是将这些风格迥异的日志统一收集汇总起来,然后按照某些规则进行分类,进行适当的标准化和统一化,在这一基础上, Elasticsearch才能完成下一步工作。
2: elasticsearch ELK的夹心层, 本质就是用来提供搜索功能。 试想当海量的服务器和交换机,以及大量应用的日志全部吐到ELK服务器上, 由logstash统一存储了, 现在你想 根据某一个关键字, 比如error, 你想看到所有 包含 “error” .这一关键字的所有日志,这个时候需要的就是E 来完成自已的功能了。
3: K: kibana, ELK 的最前台, 前台展示工具。 L 完成了日志功能存储分类, E负责搜索日志, 那在哪里执行搜索呢? 这就需要Kibanan来提供一个人性化的web前台了。 通过web来对日志进行展示和分析。
本次安装ELK只为了收集交换机日志, 几百台交换机的日志对于服务器的要求并不高,所以本次部署,ELK全部基于一台服务器完成。
二: 安装
CentOS Linux release 7.6.1810 (Core)
准备工作:
1:基础软件安装:
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:时区设置,kibana前台展示的日志时间, 会有本机时间,这样解决了 所有客户端时间不准的问题。
timedatectl set-timezone Asia/Shanghai
ntpdate pool.ntp.org
3: 关闭Selinx . 必须不解释。
sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config
4:关闭FW, 这个因人而异。
systemctl stop firewalld.service
systemctl disable firewalld.service
5:改主机名。
vi /etc/hostname
6、修改系统文件描述符大小,必须改。
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安装, 原因在于后续的可复制性,如采用yum 安装, 假设当前通过yum安装的版本为7,半年后,通过yum安装的版本为7.6,相关配置可能就会产生变化, 出现了问题又要重新排查, 本次部署了两台服务器, 分别在两地,因此采用tar包安装。
另外, ELK 之间必须有版本匹配关系, 比如说E你用的是version7, 但logstash用版本6,则无法完成安装对接。
安装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目录授权给elasticsearch用户
chown -R elasticsearch:elasticsearch /opt/elasticsearch
5、修改elasticsearch配置文件
vim /opt/elasticsearch/config/elasticsearch.yml
修改配置文件有一点比较重要,你修改的内容的每行,前面必须有一个空格, 否则会报错。
改的内容如下:
cluster.name: elk-master
node.name: node-1
path.data: /opt/elasticsearch/data
path.logs: /opt/elasticsearch/data
network.host: 192.168.1.165
其它网站改的内容参考如下:
bootstrap.memory_lock: true # 是否允许内存swapping
discovery.zen.ping.unicast.hosts: ["IP", "IP", "IP"] # 服务发现,集群中的主机
discovery.zen.minimum_master_nodes: 2 # 决定了有资格作为master的节点的最小数量,官方推荐N/2 + 1
gateway.recover_after_nodes: 3 # 少于三台的时候,recovery
6、切换到elasticsearch用户启动elasticsearch
su - elasticsearch
/opt/elasticsearch/bin/elasticsearch -d
可以先 /opt/elasticsearch/bin/elasticsearch 看启动报错
安装logstash:
tar -zxf logstash-7.1.1.tar.gz
mv logstash-7.1.1 logstash
启动logstash:
看一下logstash有没有正确安装启动:
bin/logstash -e 'input { stdin {} } output { stdout{} }'
挂载sw.conf文件, 并启动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
版本号需要和Elasticsearch 相同
mv kibana-7.1.1-linux-x86_64 kibana
2. 修改配置文件 kibana.yml
server.port: 5601 # Kibana端口号
server.host: "IP" # KibanaIP
elasticsearch.url: "http://esIP:port" # es的IP地址及端口号
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 & # 自己创建一个logs目录用来记录日志
logs/kibana.log 这个目录及文件默认是没有, 需要手动创建。
用http:xxxx:5601即可打开。
在交换机上,配置log info-center之类的, 把交换机的日志打过来,略。
配置kiabana:
第一步搞一个索引出来:
只要你交换机或其他syslog正常吐到elk上, 则可以看到类似下图:
index 输入 sysl* , 下一步即可。
日志量排序:
网友评论