Elastic Stack(ELK)-1 elasticsearch+logstash+kibana

监控规划

现有监控主要以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部署配置

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

查看es集群情况

浏览器中查看单个节点情况:http://172.16.15.53:9200
单个节点

关于elasticsearch-head插件https://github.com/mobz/elasticsearch-head
elasticsearch-head插件

可以看到有多种方式,本文选择了Chrome插件方式,比较简单也不需要在服务器部署运行等。
elasticsearch-head

elasticsearch-head

1.2 、Logstash部署配置

与elasticsearch类似也分三种安装方式:yum,rpm,源码二进制
Yum安装:
设置yum源和elasticsearch一样,如果是相同的机器不需要设置:
yum install logstash –y
下载页面:https://www.elastic.co/cn/downloads/logstash

下载界面

配置文件:
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中查看是否收到文件,需要注意系统中有日志产生才会生成的文件,可以看到索引文件和原始数据


elasticsearch

原始数据

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-*)-下一步选择时间-最后创建索引模式即可。

添加索引1

添加索引2

添加索引3

添加索引4字段信息

2. 查看刚刚匹配的文件
左侧边栏的dicover
查看索引1

查看索引2

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 211,948评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,371评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,490评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,521评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,627评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,842评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,997评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,741评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,203评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,534评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,673评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,339评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,955评论 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,770评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,000评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,394评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,562评论 2 349