监控规划
现有监控主要以zabbix为主,监控服务器的磁盘、CPU、内存、网络等,拉取部分错误日志,业务进程、端口等监控。对线上的其他日志并未拉取。关于zabbix使用可以参考相关文档,本文主要是针对ELK的日志监控和展示部署和测试。以及ELK自带的APM监控测试。
1、ELK 部署
一个完整的集中式日志系统,需要包含以下几个主要特点:
收集-能够采集多种来源的日志数据
传输-能够把日志数据传输到存储系统
存储-存储日志数据
分析-可以支持日志分析,并提供高效的检索
警告-能够提供错误告警机制
而ELK则提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。是目前主流的一种日志系统。
ELK分别为:Elasticsearch 、 Logstash以及Kibana 。新增加的Beats占用资源少,适合于在各个服务器上搜集日志,官方也推荐此工具。
Elastic Stack包含:
Elasticsearch是个开源分布式搜索引擎,提供搜集、分析、存储数据三大功能。它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。详细可参考Elasticsearch权威指南
Logstash 主要是用来日志的搜集、分析、过滤日志的工具,支持大量的数据获取方式。负责将收到的各节点日志进行过滤、修改等操作在一并发往elasticsearch上去。(现在基本只使用sever端,客户端建议使用Beats)
Kibana 也是一个开源和免费的工具,Kibana可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助汇总、分析和搜索重要数据日志。
Beats是一个轻量级日志采集器, 目前Beats包含六种工具:
Packetbeat: 网络数据(收集网络流量数据)
Metricbeat: 指标 (收集系统、进程和文件系统级别的 CPU 和内存使用情况等数据)可以用来做服务器监控采集工具
Filebeat: 日志文件(收集文件数据)(常用)
Winlogbeat: windows事件日志(收集 Windows 事件日志数据)
Auditbeat:审计数据 (收集审计日志)
Heartbeat:运行时间监控 (收集系统运行时的数据)
MySQLbeat: 收集mysql数据性能*(第三方工具)
x-pack工具:
x-pack在 Elastic Stack6.3.1后已经集成到ELK安装包中不在需要重新安装。提供了安全、警报、监控、报表、图表于一身的扩展包,是收费的。网络上有破解教程,本文暂时不涉及破解,只试用30天。
参考:
https://blog.51cto.com/zero01/2079879
https://blog.51cto.com/zero01/2082794
官网:https://www.elastic.co/cn/
Elasticsearch权威指南:https://www.gitbook.com/book/chenryn/elk-stack-guide-cn/details
性能监控(APM):https://blog.51cto.com/kbsonlong/2312113
展示:https://grafana.com/
Kafka:https://www.cnblogs.com/likehua/p/3999538.html
其他搜索关键词:ELK,ELK+filebeat+kafka,filebeat ,logstash
如果想弄明白某一功能只需要使用相关关键词查找,遇到的各种报错也是需要搜索就可以,你不是第一个遇到此问题的人(可以查询到)、你不是最后一个遇到此问题的人(记录下解决办法)
在测试部署过程遇到过一些问题,并未在此文档中记录,此文档只做简单说明,并且是安装文档,不是问题收集文档,所有问题都有解决办法在互联网。
1.1 、ElasticSearch部署配置
elk需要使用java运行环境,在此之前需要安装jdk1.8(建议1.8以上)
根据官网可以看到有多种安装方式可以选择,在linux系统下部署本文选择rpm方式,在rpm方式下又有rpm包安装和yum安装两种。
Yum安装方式:
1. 导入公钥:
rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
若出现报错ssl类的报错可以yum -y update nss,多尝试添加几次
2. 编辑yum源:
vim /etc/yum.repos.d/elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
#使用不同版本这里添加不同数字,并且确认是否可用
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
检查是否可用
yum list |grep elasticsearch #检查
yum install elasticsearch #安装,由于文件比较大所以下载需要很长时间
RPM包:
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.1-x86_64.rpm
rpm --install elasticsearch-7.0.1-x86_64.rpm
可用使用RPM查看安装的默认位置:rpm -ql elasticsearch
使用上述安装方式无法再一台主机实现多实例功能,可用使用源码方式,在不同文件夹中拷贝解压出来的文件,修改配置文件参数,可用在一台机器运行多实例,继而在一台机器测试集群功能。
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.0.1-linux-x86_64.tar.gz
tar -xzf elasticsearch-7.0.1-linux-x86_64.tar.gz
cd elasticsearch-7.0.1/
配置文件
/etc/elasticsearch/elasticsearch.yml
/etc/sysconfig/elasticsearch
elasticsearch.yml 文件用于配置集群节点等相关信息的
elasticsearch 文件则是配置服务本身相关的配置,可用用来指定java文件位置
jvm.options配置程序运行虚拟java参数包括堆内存等优化
vi /etc/elasticsearch/elasticsearch.yml
# ---------------------------------- Cluster -----------------------------------
cluster.name: test #设置集群名称,在同一个网络环境下相同集群名称会添加到一起
#
# ------------------------------------ Node ------------------------------------
node.name: node-1 #节点名称,在相同的集群下,加点叫什么名字,不要重复
node.master: true # 节点功能,建议查看https://www.cnblogs.com/37yan/p/9928748.html
node.data: true
#node.ingest: true
#index.number_of_shards: 1 #数据分片数,默认为5,有时候设置为3 在测试中发现安装的7.0 版本默认为1
# ----------------------------------- Paths ------------------------------------
path.data: /var/lib/elasticsearch #数据存储位置
path.logs: /var/log/elasticsearch #日志存储位置
# ----------------------------------- Memory -----------------------------------
bootstrap.memory_lock: false
bootstrap.system_call_filter: false #此处特别注意,centos6.0 不支持SecComp,如果此处是ture会报错
# ---------------------------------- Network -----------------------------------
network.host: 172.16.15.53 #绑定网卡信息
http.port: 9200 #服务端口信息
transport.tcp.port: 9300 #集群传输端口
# --------------------------------- Discovery ----------------------------------
discovery.seed_hosts: ["172.16.15.53","172.16.15.26","172.16.15.44" ] #集群中自动发现的机器
cluster.initial_master_nodes: ["172.16.15.53","172.16.15.26","172.16.15.44"]
#机器中可以作为主节点的机器
以上是配置是常用配置文件,设置完成以后可以使用命令启动:
service elasticsearch start #(yum和rpm安装)
#xxx/bin/elasticsearch start #解压位置启动
启动后查看需要注意两个端口都需要在防火墙开通
如果启动出现报错,根据报错信息查找解决方案。可以参考:
https://www.cnblogs.com/configure/p/7479988.html
特别注意:elasticsearch是需要java环境的,所以在安装前需要安装配置JDK1.8 安装比较简单
如果是集群在多台机器上都需要安装部署,配置文件根据需要修改对应参数:
例如相同的集群名称,不同的节点信息等
如果是在单机部署多实例只能使用源码安装,并配置多个端口
可以在浏览器中查看ES集群情况:http://172.16.15.53:9200/_cluster/health?pretty
浏览器中查看单个节点情况:http://172.16.15.53:9200
关于elasticsearch-head插件https://github.com/mobz/elasticsearch-head
可以看到有多种方式,本文选择了Chrome插件方式,比较简单也不需要在服务器部署运行等。
1.2 、Logstash部署配置
与elasticsearch类似也分三种安装方式:yum,rpm,源码二进制
Yum安装:
设置yum源和elasticsearch一样,如果是相同的机器不需要设置:
yum install logstash –y
下载页面:https://www.elastic.co/cn/downloads/logstash
配置文件:
vim /etc/logstash/logstash.yml #此配置文件主要用来配置logstash本身,下属三个参数根据需要配置即可。
path.data: /var/lib/logstash
http.host: "172.16.15.53"
path.logs: /var/log/logstash
logstash主要配置文件是需要新建
测试:
vim /etc/logstash/conf.d/syslog.conf
input { # 定义日志源
syslog {
type => "system-syslog" # 定义类型
port => 10514 # 定义监听端口
}
}
output { # 定义日志输出
elasticsearch {
hosts => ["172.16.15.53:9200"] # 定义es服务器的ip
index => "system-syslog-%{+YYYY.MM}" # 定义索引
}
}
在配置主机上rsyslog转发系统日志到10514端口即可
vim /etc/rsyslog.conf
*.* @@172.16.15.53:10514 #根据自己情况修改ip和端口 @@代表使用tcp端口
关于logstash配置文件使用可以参考:
Logstash 分为 Input、Output、Filter、Codec 等多种plugins。
Input:数据的输入源也支持多种插件,如elk官网的beats、file、graphite、http、kafka、redis、exec等等等
Output:数据的输出目的也支持多种插件,如本文的elasticsearch,当然这可能也是最常用的一种输出。以及exec、stdout终端、graphite、http、zabbix、nagios、redmine等等
Filter:使用过滤器根据日志事件的特征,对数据事件进行处理过滤后,在输出。支持grok、date、geoip、mutate、ruby、json、kv、csv、checksum、dns、drop、xml等等
Codec:编码插件,改变事件数据的表示方式,它可以作为对输入或输出运行该过滤。和其它产品结合,如rubydebug、graphite、fluent、nmap等等。
参考测试的配置文件:
input {
#file {#本机的文件 第一次建议使用这个拉取 数据,后续在考虑使用beats和kafka
#path => "/home/app/tengine/logs/access.log"
#type => "nginx"
#start_position => "beginning"
# }
# beats { #beats 发送过来的文件
# port => 5044
# }
kafka { #从kafka拉取数据
bootstrap_servers => "172.16.15.26:9092"
consumer_threads => 1
topics => ["system"]
}
}
filter { #过滤
json {
source => "message"
}
if "nginx" in [tags]{
grok {
match => { "message" => "%{IPORHOST:http_host} %{IPORHOST:clientip} - %{USERNAME:remote_user} \[%{HTTPDATE:timestamp}\] \"(?:%{WORD:http_verb} %{NOTSPACE:http_request}(?: HTTP/%{NUMBER:http_version})?|%{DATA:raw_http_request})\" %{NUMBER:response} (?:%{NUMBER:bytes_read}|-) %{QS:referrer} %{QS:http_agent} %{QS:xforwardedfor} %{NUMBER:request_time:float}"} *#* *定义日志的输出格式*
}
geoip {
source => "clientip"
}
}
}
output { # 定义日志输出
if "nginx" in [tags]{ #根据关键字区分不同类型数据,关键字在filebeat中配置
elasticsearch {
hosts => ["172.16.15.53:9200"] #定义es服务器的ip
index => "nginx-%{+YYYY.MM.dd}" # 定义索引
}}
else if "system" in [tags]{
elasticsearch {
hosts => ["172.16.15.53:9200"] #定义es服务器的ip
index => "system-%{+YYYY.MM.dd}" #定义索引
}}
else{
elasticsearch {
hosts => ["172.16.15.53:9200"] #定义es服务器的ip
index => "mysql-%{+YYYY.MM.dd}" #定义索引
} }}
启动logstash
在centos6 使用yum安装的logstash7.0 启动时有点问题请注意;参考官网文档
https://www.elastic.co/guide/en/logstash/7.0/running-logstash.html
使用service logstash start/stop 是无法运行的。由于保护进程原因需要使用initctl 才能关闭,建议使用
ln -s /usr/share/logstash/bin/logstash /bin/
initctl stop logstash
nohup logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/filebeat.conf & #后台运行指定配置文件
启动后可以在elasticsearch-head中查看是否收到文件,需要注意系统中有日志产生才会生成的文件,可以看到索引文件和原始数据
1.3 、Kibana部署配置
在设置好yum源的机器yum -y install kibana
配置文件/etc/kibana/kibana.yml
server.port: 5601 #端口
server.host: 172.16.15.53 #绑定ip
elasticsearch.hosts: ["http://172.16.15.53:9200","http://172.16.15.26:9200"] #调用的es集群,可以写多个
logging.dest: /var/log/kibana.log #日志
i18n.locale: "zh-CN" #设置中文
其他配置文件可以根据需要设置
启动:service kibana start
启动后注意防火墙设置,访问http://172.16.15.53:5601
如果出现报错,无法连接es等,可以稍等会
由于我们没有启动x-pack,不需要登录名和密码
1. 开始添加索引
左边栏最后管理——索引模式-创建索引模式-输入匹配的名称(例如nginx-*)-下一步选择时间-最后创建索引模式即可。
2. 查看刚刚匹配的文件
左侧边栏的dicover