ELK入门

26.1 ELK入门

在日常运维工作中,对于系统和业务日志的处理尤为重要。作为运维工程师,假如管理的服务器数量并不是很多,那么不需要借助任何工具也能管理过来。但如果服务器数量非常多,而因为业务的关系,运维和开发人员常常需要通过查看日志来定位问题,很明显不借助任何工具来帮助我们管理日志是不现实的,不仅让人感觉繁琐,效率也会低下。


ELK介绍

需求背景:

1. 业务发展越来越庞大,服务器越来越多;

2. 各种访问日志、应用日志及错误日志的量也越来越多;

3. 开发人员排查问题,需要到服务器上查看日志分析解决问题,不方便;

4. 运营人员需要一些数据,需要我们运维到服务器上分析日志,不方便。

概念:

ELK 是 elastic 公司旗下三款产品ElasticSearch、Logstash、Kibana的首字母组合,也即Elastic Stack包含ElasticSearch、Logstash、Kibana、Beats

ElasticSearch是一个搜索引擎,用来搜索、分析、存储日志。它是分布式的,可以横向扩容,可以自动发现,索引自动分片

Logstash用来采集日志,把日志解析为json格式交给ElasticSearch

Kibana是一个数据可视化组件,把处理后的结果通过web界面展示

Beats是一个轻量型日志采集器

X-Pack对Elastic Stack提供了安全、警报、监控、报表、图表于一身的扩展包,是收费的

为什么要使用ELK:

一般我们需要进行日志分析场景:直接在日志文件中 grep、awk 就可以获得自己想要的信息。但在规模较大也就是日志量多而复杂的场景中,
此方法效率低下,面临问题包括日志量太大如何归档、文本搜索太慢怎么办、如何多维度查询。需要集中化的日志管理,所有服务器上的日志
收集汇总。常见解决思路是建立集中式日志收集系统,将所有节点上的日志统一收集,管理,访问。

大型系统通常都是一个分布式部署的架构,不同的服务模块部署在不同的服务器上,问题出现时,大部分情况需要根据问题暴露的关键信息,定位到具体的服务器和服务模块,构建一套集中式日志系统,可以提高定位问题的效率。

一个完整的集中式日志系统,需要包含以下几个主要特点:

收集-能够采集多种来源的日志数据
传输-能够稳定的把日志数据传输到中央系统
存储-如何存储日志数据
分析-可以支持 UI 分析
警告-能够提供错误报告,监控机制

而ELK则提供了一整套解决方案,并且都是开源软件,之间互相配合使用,完美衔接,高效的满足了很多场合的应用。是目前主流的一种日志系统。

ELK架构:

在这里插入图片描述

上面是 ELK 技术栈的一个架构图,从图中可以清楚的看到数据流向:

Beats是单一用途的数据传输平台,它可以将多台机器的数据发送到 Logstash 或 ElasticSearch。但 Beats 并不是不可或缺的一环,所以本文中暂不介绍

Logstash是一个动态数据收集管道,支持以 TCP/UDP/HTTP 多种方式收集数据(也可以接受 Beats 传输来的数据),并对数据做进一步丰富或提取字段处理

ElasticSearch是一个基于 JSON 的分布式的搜索和分析引擎,作为 ELK 的核心,它集中存储数据

Kibana是 ELK 的用户界面,它将收集的数据进行可视化展示(各种报表、图形化数据),并提供配置、管理 ELK 的界面。

ELK安装准备

官网:https://www.elastic.co/cn/ ,中文文档:https://elkguide.elasticsearch.cn/

环境准备:

3台机器:lzx:192.168.100.150 ,lzx1:192.168.100.160 ,lzx2:192.168.100.170

角色划分:

3台机器都安装elasticSearch(简称es),1个主节点为lzx,2个数据节点分别是lzx1和lzx2

es主节点lzx上安装kibana,其中1台es数据节点lzx1上安装logstash,另外一台lzx2上安装beats

3台机器都要安装jdk8(openjdk也可以),关闭3防火墙和selinux
  • 三台机器都编辑hosts:
# vim /etc/hosts

192.168.100.150 lzx
192.168.100.160 lzx1
192.168.100.170 lzx2
  • 三台机器都安装openjdk:
# yum install -y java-1.8.0-openjdk

# which java
/usr/bin/java

es安装

  • 三台机器都安装es:
# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch				#--import,导入密钥

# vim /etc/yum.repos.d/elastic.repo
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

# yum install -y elasticsearch

也可以使用下载rpm包安装

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.0.0.rpm

rpm -ivh elasticsearch-6.0.0.rpm

es配置

elasticsearch有两个配置文件:/etc/elasticsearch/etc/sysconfig/elasticsearch,配置集群我们需要配置/etc/elasticsearch这个配置文件。

  • 三台机器都要配置:

lzx

# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: lzxlinux				#Cluster里面添加该行,定义集群名
node.name: lzx				#指定节点主机名,在Node中添加该行
node.master: true				#表示是否为主节点,在Node中添加该行
node.data: false				#表示是否是数据节点,在Node中添加该行
network.host: 192.168.100.150				#在Network中添加该行,监听ip
discovery.zen.ping.unicast.hosts: ["192.168.100.150","192.168.100.160","192.168.100.170"]
#		在Discovery中添加该行,定义集群中那些角色,可以写ip地址,也可以写主机名

lzx1

# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: lzxlinux
node.name: lzx1
node.master: false				#表示不是主节点
node.data: true				#表示是数据节点
network.host: 192.168.100.160
discovery.zen.ping.unicast.hosts: ["192.168.100.150","192.168.100.160","192.168.100.170"]

lzx2

# vim /etc/elasticsearch/elasticsearch.yml
cluster.name: lzxlinux
node.name: lzx2
node.master: false				#表示不是主节点
node.data: true				#表示是数据节点
network.host: 192.168.100.170
discovery.zen.ping.unicast.hosts: ["192.168.100.150","192.168.100.160","192.168.100.170"]
  • 全部启动es:
# systemctl start elasticsearch

# netstat -lntp |grep java
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
          
tcp6       0      0 192.168.100.150:9200    :::*                    LISTEN      1305/java           
tcp6       0      0 192.168.100.150:9300    :::*                    LISTEN      1305/java  

# ls /var/log/elasticsearch/				#已经生成日志
gc.log.0.current     lzxlinux_deprecation.log             lzxlinux_index_search_slowlog.log
lzxlinux_access.log  lzxlinux_index_indexing_slowlog.log  lzxlinux.log

已经在监听9200和9300端口。

  • curl查看es:

lzx上执行

# curl '192.168.100.150:9200/_cluster/health?pretty'				#集群健康检查
{
   
  "cluster_name" : "lzxlinux",
  "status" : "green",				#status是green就说明集群没问题,如果是yellow或red都说明有问题
  "timed_out" : false,
  "number_of_nodes" : 3,				#3个节点
  "number_of_data_nodes" : 2,				#2个数据节点
  "active_primary_shards" : 0,
  "active_shards" : 0,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "delayed_unassigned_shards" : 0,
  "number_of_pending_tasks" : 0,
  "number_of_in_flight_fetch" : 0,
  "task_max_waiting_in_queue_millis" : 0,
  "active_shards_percent_as_number" : 100.0
}

还可以查看集群详细信息:

# curl '192.168.100.150:9200/_cluster/state?pretty'				#查看集群详细信息

安装kibana

前面讲到过,kibana是一个数据可视化组件,把处理后的结果通过web界面展示,我们需要在主节点机器上安装它。

  • lzx上下载安装:
# yum install -y kibana
  • 修改配置文件:
# vim /etc/kibana/kibana.yml
server.port: 5601
server.host: 192.168.100.150
elasticsearch.url: "http://192.168.100.150:9200"
logging.dest: /var/log/kibana.log				#指定kibana日志路径
  • 启动服务:
# touch /var/log/kibana.log; chmod 777 /var/log/kibana.log

# systemctl start kibana

# ps aux |grep kibana
kibana     1062 18.9 18.2 1198292 182080 ?      Dsl  21:37   0:08 /usr/share/kibana/bin/../node/bin/node --no-warnings /usr/share/kibana/bin/../src/cli -c /etc/kibana/kibana.yml

# netstat -lntp |grep node
tcp        0      0 192.168.100.150:5601    0.0.0.0:*               LISTEN      1062/node

已经在监听5601端口。

  • 访问web界面:

在浏览器输入192.168.150:5601,访问web界面,因为没有安装x-pack,所以没有用户验证。

在这里插入图片描述


安装logstash

除了kibana之外,我们还需要安装logstash,按照之前的角色划分,这次在lzx1上操作。

  • lzx1上下载安装:
# yum install -y logstash
  • 编辑配置文件:
# vim /etc/logstash/conf.d/syslog.conf				#写入下面内容

input {
   
  syslog {
   
    type => "system-syslog"				#定义日志类型
    port => 10514				#定义监听端口
  }
}				#input部分定义日志源

output {
   
  stdout {
   
    codec => rubydebug				#表示将输出在当前屏幕显示出来
  }
}				#output部分定义输出位置
  • 检查配置文件是否有错:
# cd /usr/share/logstash/bin/

# ls
benchmark.sh         logstash               logstash.lib.sh      pqrepair
cpdump               logstash.bat           logstash-plugin      ruby
dependencies-report  logstash-keystore      logstash-plugin.bat  setup.bat
ingest-convert.sh    logstash-keystore.bat  pqcheck              system-install

# ./logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/syslog.conf --config.test_and_exit
#		检查配置文件是否出错。--path.settings指定配置文件所在目录;-f指定具体要检查的配置文件;--config.test_and_exit表示检查配置文件且检查完退出

OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties
[2018-09-30T22:32:30,002][INFO ][logstash.setting.writabledirectory] Creating directory {
   :setting=>"path.queue", :path=>"/var/lib/logstash/queue"}
[2018-09-30T22:32:30,030][INFO ][logstash.setting.writabledirectory] Creating directory {
   :setting=>"path.dead_letter_queue", :path=>"/var/lib/logstash/dead_letter_queue"}
[2018-09-30T22:32:34,201][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
Configuration OK				#显示配置OK就说明刚刚的配置文件没问题
[2018-09-30T22:32:56,973][INFO ][logstash.runner          ] Using config.test_and_exit mode. Config Validation Result: OK. Exiting Logstash

将系统日志输出到10514端口:

# vim /etc/rsyslog.conf				#配置系统日志文件,在RULES下面增加一行
*.* @@192.168.100.160:10514				#*.* 表示所有类型的日志;将所有日志都输出到192.168.100.160的10514端口
  • 启动服务:
# systemctl restart rsyslog				#重启rsyslog服务,使配置文件生效 

# ./logstash --path.settings /etc/logstash -f /etc/logstash/conf.d/syslog.conf				#启动logstash服务

OpenJDK 64-Bit Server VM warning: If the number of processors is expected to increase from one, then you should configure the number of parallel GC threads appropriately using -XX:ParallelGCThreads=N
Sending Logstash logs to /var/log/logstash which is now configured via log4j2.properties
[2018-09-30T22:49:54,963][WARN ][logstash.config.source.multilocal] Ignoring the 'pipelines.yml' file because modules or command line options are specified
[2018-09-30T22:49:55,111][INFO ][logstash.agent           ] No persistent UUID file found. Generating new UUID {
   :uuid=>"4923c0c7-3e8c-47d1-a484-e66a164e0d3d", :path=>"/var/lib/logstash/uuid"}
[2018-09-30T22:50:04,030][INFO ][logstash.runner          ] Starting Logstash {
   "logstash.version"=>"6.4.1"}
[2018-09-30T22:50:21,698][INFO ][logstash.pipeline        ] Starting pipeline {
   :pipeline_id=>"main", "pipeline.workers"=>1, "pipeline.batch.size"=>125, "pipeline.batch.delay"=>50}
[2018-09-30T22:50:26,644][INFO ][logstash.pipeline        ] Pipeline started successfully {
   :pipeline_id=>
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值