ELK初步实现日志收集(elasticsearch,logstash,kibana,filebeat)

简介:

elasticsearch: 分布式搜索引擎

logstash: 日志收集与过滤,输出给elasticsearch

kibana: Kibana 是为 Elasticsearch设计的开源分析和可视化平台

filebeat: Filebeat是本地文件的日志数据采集器

环境:

1或多台elasticsearch,主机2g+,从机1g+

1台logstash,1g+

1台业务机,要安装filebeat

1台kibana可视化

0.通用的java安装法

官网指路:https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

版本:

Linux x64185.16 MB  jdk-8u231-linux-x64.tar.gz

具体下载地址:https://download.oracle.com/otn/java/jdk/8u231-b11/5b13a193868b4bf28bcb45c792fce896/jdk-8u231-linux-x64.tar.gz?AuthParam=1573475025_69f85eeb325c1a8e2037d76d4964650c

注:这个下载地址不保证直接能用,常规节奏是进入Oracle官网进行点击下载(还要求注册Oracle会员),然后用ftp上传服务器。

如果好使,可以直接在shell里wget它。本文是进行了Oracle会员注册后,再shell中就可以下载了。不知道这个注册是不是影响了下载能力。

安装Java环境

 以本文为例,我们按照管理将文件jdk-8u231-linux-x64.tar.gz下载到/software文件夹中。

# 本文以jdk-8u192版本为例
 
# cd /software
# tar xvf jdk-8u192-linux-x64.tar.gz
# mkdir /usr/local/java
# mv /software/jdk1.8.0_192 /usr/local/java/
# 建立一个/usr/local/的java专用文件夹,因为java环境版本繁杂,为以后可能进行的版本拓展,将所有java文件放在专用文件夹下,并以版本区分
 
# 将java加入环境变量。
# echo "export PATH=\$PATH:/usr/local/java/jdk名字不固定/bin" >> /etc/profile
# echo "export PATH=\$PATH:/usr/local/java/jdk1.8.0_192/bin" >> /etc/profile
# source /etc/profile

1.elasticsearch下载与安装

官网首页:https://www.elastic.co/cn/downloads/

下载elasticsearch https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.2-x86_64.rpm

下载logstash https://artifacts.elastic.co/downloads/logstash/logstash-7.4.2.rpm

# cd /software
# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.4.2-x86_64.rpm

上面java安装路径因人而异。此处需要软连接。根据各自区别填写
# ln -s /usr/local/java/jdk名字不固定/bin/java /usr/bin/java
# ln -s /usr/local/java/jdk1.8.0_192/bin/java /usr/bin/java

# yum install -y elasticsearch-7.4.2-x86_64.rpm
# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"

如下即可
cluster.name: 自定义集群名字
path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
network.host: 0.0.0.0
http.port: 9200
要做集群可以先往下看,配置集群时还要加

# systemctl start elasticsearch
# systemctl enable elasticsearch
稍等一分钟 9200 9300端口被占用,视为成功。
# ss -nltp


# curl http://10.1.1.14:9200/_cluster/health?pretty
{
  "cluster_name" : "test_cluster",
  "status" : "green",    #绿为成功
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "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     #NaN为失败
}

2.elasticsearch集群

可以把刚才那机器克隆一下。
分别配置:
# cat /etc/elasticsearch/elasticsearch.yml |grep -v "#"

path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
cluster.name: elk-cluster
node.name: 10.1.1.14					#本机IP或主机名
node.master: true						#指定为master节点
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.1.1.14", "10.1.1.15"]		#集群所有节点IP

path.data: /var/lib/elasticsearch
path.logs: /var/log/elasticsearch
cluster.name: elk-cluster
node.name: 10.1.1.15					#本机IP或主机名
node.master: false						#指定为slave节点
network.host: 0.0.0.0
http.port: 9200
discovery.zen.ping.unicast.hosts: ["10.1.1.14", "10.1.1.15"]		#集群所有节点IP

注:复制上面的时候#后面的删掉,有可能有问题 @_@ 。

克隆机需要清空他俩。
# rm -rf /var/lib/elasticsearch/*
# rm -rf /var/log/elasticsearch/*

分别重启,稍等一两分钟 9200 9300端口被占用,视为成功。
# systemctl restart elasticsearch


# curl http://10.1.1.14:9200/_cluster/health?pretty
"status" : "green",
"number_of_nodes" : 2,
"number_of_data_nodes" : 2,
视为成功

3.elasticsearch-head安装

案例 master IP:10.1.1.28

仅安装在master即可

elasticsearch-head是集群管理、数据可视化、增删改查、查询语句可视化工具。

安装组件node.js

官网:https://nodejs.org/en/download/

具体地址:https://nodejs.org/dist/v12.13.1/node-v12.13.1-linux-x64.tar.xz

 

# cd /software
# wget https://nodejs.org/dist/v12.13.1/node-v12.13.1-linux-x64.tar.xz
# tar xf node-v12.13.1-linux-x64.tar.xz -C /usr/local/
# mv /usr/local/node-v12.13.1-linux-x64/ /usr/local/nodejs/
# ls /usr/local/nodejs/bin/npm
/usr/local/nodejs/bin/npm				确认有此命令

# ln -s /usr/local/nodejs/bin/npm /bin/npm
# ln -s /usr/local/nodejs/bin/node /bin/node

# cd /software
git或者手动下载
# git clone git://github.com/mobz/elasticsearch-head.git
# mv /software/elasticsearch-head/ /usr/local/elasticsearch-head

# mkdir /tmp/phantomjs/
# cd /tmp/phantomjs/
# wget https://bitbucket.org/ariya/phantomjs/downloads/phantomjs-2.1.1-linux-x86_64.tar.bz2
这个包挺大,网络不好的建议外部下载传入。

# cd /usr/local/elasticsearch-head/
# npm install --unsafe-perm --registry=http://registry.npm.taobao.org

npm安装后可能会有ERROR(红色)
再试一次,如果还是红色说明有问题。
如果再试之后,仅剩下WARN(黄色),则成功。

# cd /usr/local/elasticsearch-head/
# nohup npm run start &>nohup.out
成功则终端被占用,用PC浏览器访问9100端口
http://10.1.1.28:9100/

能看到图形化界面了。成功

4.使用图形化界面。

此处需要两台机器同时操作。

# echo 'http.cors.enabled: true' >> /etc/elasticsearch/elasticsearch.yml
# echo 'http.cors.allow-origin: "*"' >> /etc/elasticsearch/elasticsearch.yml
分别重启,稍等一两分钟 9200 9300端口被占用,视为成功。(要有耐心等)
# systemctl restart elasticsearch

# cd /usr/local/elasticsearch-head/
# nohup npm run start &>nohup.out

浏览器访问 http://主机IP:9100
    搜索框中输入 http://从机IP:9200/ 点击连接。
    绿了就成功了。

5.安装logstash

另开一台机器,安装logstash。内存1g+

安装Java,同上,最后source环境变量为止。

需要java,上面有

# cd /software
# wget https://artifacts.elastic.co/downloads/logstash/logstash-7.4.2.rpm
# yum install -y logstash-7.4.2.rpm
# cat /etc/logstash/logstash.yml |grep -v '#' |grep -v '^$'

path.data: /var/lib/logstash
path.logs: /var/log/logstash
path.config: /etc/logstash/conf.d/					#打开注释,并加上配置目录路径
http.host: "10.1.1.16"								#打开注释,并改为logstash机器的IP

测试
# /usr/share/logstash/bin/logstash -e 'input {stdin {}} output {stdout {}}'
等候。。。
Successfully started Logstash API endpoint
视为成功。

6.收集日志

自制配置文件
# vim /etc/logstash/conf.d/自定义.conf

内容如下:

input {
  file {
	path => "/var/log/messages"
	start_position => "beginning"
	type => "messages"
    }

  file {
	path => "/var/log/yum.log"
	start_position => "beginning"
	type => "yum"
  }
}

output {

   if [type] == "messages" {
	elasticsearch {
		hosts => ["10.1.1.28:9200"]
		index => "message-%{+YYYY.MM.dd}"
	  }
   }

   if [type] == "yum" {
	elasticsearch {
		hosts => ["10.1.1.28:9200"]
		index => "yum-%{+YYYY.MM.dd}"
	}
  }

}

结束

要注意input > file > path 的日志源文件要有可读权限
# chmod o+r /var/log/messages
# chmod o+r /var/log/yum.log

# /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/test.conf &
或抛弃所有信息
# /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/test.conf &> /dev/null

[1] 15694
如上给出一个pid。成功

终端上出现各种信息,如果没有报错,logstash没自动关闭。
访问URL:http://master的IP:9100/

集群概览会有新内容生成。


重启为
# pkill java
# /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/test.conf &

7.filebeat轻量级收集日志

logstash体量大,运行繁重,但是他能接受跨服务器和多种其他服务数据的输入。

我们使用让每一台业务机中安装一个轻量级的filebeat进行日志收集,交给logstash。再转交给elasticsearch。

(转交的意义在于elasticsearch容易并发而宕机,logstash有队列pipeline保护)。

再某业务机中安装filebeat

# cd /software
# wget https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.4.2-x86_64.rpm
# yum -y install filebeat-7.4.2-x86_64.rpm 
# vi /etc/filebeat/filebeat.yml

# cat /etc/filebeat/filebeat.yml |grep -v '#' |grep -v '^$'
如下即可

filebeat.inputs:
- type: log
  enabled: true						#改为true
  paths:
    - /var/log/*.log				#收集的日志路径
filebeat.config.modules:
  path: ${path.config}/modules.d/*.yml
  reload.enabled: false
setup.template.settings:
  index.number_of_shards: 3

#filebeat收集日志直接传给elasticsearch请写这个
output.elasticsearch:				#输出给es集群
  hosts: ["elasticsearch主机的IP:9200"]			#es集群节点ip

#filebeat收集日志直接传给logstash请写这个
output.logstash:					这两句非常重要,表示日志输出给logstash
  hosts: ["logstash的IP:5044"]			IP为logstash服务器的IP;端口5044对应logstash上的配置
#上面二选一

processors:
  - add_host_metadata: ~
  - add_cloud_metadata: ~


# systemctl stop filebeat
# systemctl start filebeat

当直接传给elasticsearch时,无需安装logstash

当由logstash转发时,要修改logstash的配置

# vim /etc/logstash/conf.d/自定义.conf

input {
    beats {
        port => 5044
    }
}

output {
    elasticsearch {
        hosts => ["elasticsearch主机的IP:9200"]
        index => "自定义名字-%{+YYYY.MM.dd}"  
    }
}

# pkill java
# /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/自定义.conf &

8.elasticsearch的图形界面kibana

# cd /software
# wget https://artifacts.elastic.co/downloads/kibana/kibana-7.4.2-x86_64.rpm
# yum -y install kibana-7.4.2-x86_64.rpm
# vi /etc/kibana/kibana.yml

# cat /etc/kibana/kibana.yml |grep -v '#' |grep -v '^$'
如下即可
server.port: 5601								#端口
server.host: "0.0.0.0"							#监听所有,允许所有人能访问
elasticsearch.url: "http://10.1.1.19:9200"		#ES集群的路径
logging.dest: /var/log/kibana.log				#我这里加了kibana日志,方便排错与调试

日志需要手动创建
# touch /var/log/kibana.log
# chown kibana.kibana /var/log/kibana.log

# systemctl start kibana
# systemctl enable kibana

# ss -nltp
5601被占用表示成功。

然后kibana汉化

# cd /software
# wget https://github.com/anbai-inc/Kibana_Hanization/archive/master.zip
# unzip Kibana_Hanization-master.zip -d /usr/local
# cd /usr/local/Kibana_Hanization-master/

# python main.py kibana的安装目录
# python main.py /usr/share/kibana/

# systemctl stop kibana
# systemctl start kibana

等待....
恭喜,Kibana汉化完成!

验证:

访问http://kibana服务器IP:5601

9.总结

还差个kafka

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值