文档章节

基于FlumeNG+Kafka+ElasticSearch+Kibana的日志系统

张shieppp
 张shieppp
发布于 06/22 17:08
字数 1424
阅读 86
收藏 0

环境准备

1.服务器概览

hostnameip操作系统说明安装内容
node1.fek192.168.2.161centos 7node1节点nginx,jdk1.8, flumeNG, elasticsearch slave1
node2.fek192.168.2.162centos 7node2节点jdk1.8, elasticsearch slave2
master.fek192.168.2.163centos 7master节点jdk1.8, elasticsearch master, kibana
master.kafka192.168.2.151centos 7master节点jdk1.8, kafka master, zookeeper
worker1.kafka192.168.2.152centos 7slaver节点jdk1.8, kafka master, zookeeper
worker2.kafka192.168.2.153centos 7slaver节点jdk1.8, kafka master, zookeeper

2.服务器环境安装

三台服务均安装jdk1.8(此处省略,自行安装)。

node1.fek安装nginx,模仿需要采集日志的web容器(此处省略,自行安装)。

三台服务均执行

#添加host
192.168.2.161 node1.fek
192.168.2.162 node2.fek
192.168.2.163 master.fek

192.168.2.151 master.kafka
192.168.2.152 worker1.kafka
192.168.2.153 worker2.kafka


#执行以下命令关闭防火墙
[root@node1 ~]systemctl stop firewalld && systemctl disable firewalld
[root@node1 ~]setenforce 0

#将SELINUX的值改成disabled
[root@node1 ~]vim /etc/selinux/config

SELINUX=disabled

#修改系统参数
sudo vim /etc/security/limits.conf
*               soft    nproc           65536
*               hard    nproc           65536
*               soft    nofile          65536
*               hard    nofile          65536
sudo vim /etc/sysctl.conf
vm.max_map_count= 262144
sudo sysctl -p


#重启服务器
[root@node1 ~]reboot

elasticsearch集群安装

注意:安装elasticsearch需要非root用户,此处我们用user用户

mkdir -p /opt/elasticsearch
chown user:user /opt/elasticsearch
su user

下载

wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.0.tar.gz

tar -zxvf elasticsearch-6.3.0.tar.gz

cd elasticsearch-6.3.0/config

mkdir -p /opt/elasticsearch/data
mkdir -p /opt/elasticsearch/logs

修改配置参数 elasticsearch.yml

cluster.name: fek-cluster                                 # 集群名称
node.name: els1                                             # 节点名称,仅仅是描述名称,用于在日志中区分

path.data: /opt/elasticsearch/data                           # 数据的默认存放路径
path.logs: /opt/elasticsearch/logs                           # 日志的默认存放路径

network.host: 192.168.2.163                                   # 当前节点的IP地址
http.port: 9200                                             # 对外提供服务的端口,9300为集群服务的端口

discovery.zen.ping.unicast.hosts: ["node1.fek", "node2.fek", "master.fek"]       
# 集群个节点IP地址,也可以使用els、els.shuaiguoxia.com等名称,需要各节点能够解析

discovery.zen.minimum_master_nodes: 2                       # 为了避免脑裂,集群节点数最少为 半数+1

jvm.options

-Xms1g                                                  # JVM最大、最小使用内存
-Xmx1g

对于node1.fek node2.fek,安装实际情况修改elasticsearch.yml参数

启动集群

./bin/elasticsearch -d

访问http://192.168.2.163:9200/_cluster/health?pretty,查看集群状态

{
  "cluster_name" : "fek-cluster",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 3,
  "number_of_data_nodes" : 3,
  "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
}

http://192.168.2.163:9200/_cluster/state/nodes?pretty

{
  "cluster_name" : "fek-cluster",
  "compressed_size_in_bytes" : 9419,
  "nodes" : {
    "NaRMw2usS0q28ZscXMHHcQ" : {
      "name" : "node2.fek",
      "ephemeral_id" : "1BF5Tiw_RbCq9FsbwuyWjA",
      "transport_address" : "192.168.2.162:9300",
      "attributes" : {
        "ml.machine_memory" : "1021931520",
        "ml.max_open_jobs" : "20",
        "xpack.installed" : "true",
        "ml.enabled" : "true"
      }
    },
    "y3UhYgopT12alHMlJDJlWQ" : {
      "name" : "node1.fek",
      "ephemeral_id" : "j5K2Re4QSW-GcJMVVXPP5g",
      "transport_address" : "192.168.2.161:9300",
      "attributes" : {
        "ml.machine_memory" : "1021931520",
        "ml.max_open_jobs" : "20",
        "xpack.installed" : "true",
        "ml.enabled" : "true"
      }
    },
    "kO7CFyN3RKWLURRtrhwTMQ" : {
      "name" : "master.fek",
      "ephemeral_id" : "JH2omxVpRVyqQN47RMENsQ",
      "transport_address" : "192.168.2.163:9300",
      "attributes" : {
        "ml.machine_memory" : "1021931520",
        "ml.max_open_jobs" : "20",
        "xpack.installed" : "true",
        "ml.enabled" : "true"
      }
    }
  }
}

Kafka集群安装

Kafka集群部署使用:https://my.oschina.net/orrin/blog/1834218

FlumeNG安装

***0.消费Kafka信息,传入ES

mkdir -p /opt/app/
cd /opt/app/
wget http://opgwqjk89.bkt.clouddn.com/kafka-es-1.0-SNAPSHOT.jar
java -jar kafka-es-1.0-SNAPSHOT.jar

源码地址:kafka-es 可以根据项目需要,过滤清洗日志,在入ES的库时可以异步写入HDFS,做大数据分析

此处选择Kafka是因为其削峰能力。

1. 配置FlumeNG 此处,我们使用node1.fek上nginx模拟需要采集日志的应用,nginx日志位于/usr/local/nginx/logs目录

mkdir -p /opt/flume/
cd /opt/flume/
wget http://mirror.bit.edu.cn/apache/flume/1.8.0/apache-flume-1.8.0-bin.tar.gz
tar -zxvf apache-flume-1.8.0-bin.tar.gz

配置flume-fek.conf,可以配置Spooling Directory Source(监听一个目录)或 Exec Source(监听一个文件)

#Spooling Directory Source
agent.sources = sc_nginx
agent.channels = cl_nginx
agent.sinks = sk_nginx

agent.sources.sc_nginx.type = spooldir
agent.sources.sc_nginx.spoolDir = /usr/local/nginx/logs
agent.sources.sc_nginx.fileHeader = true


agent.channels.cl_nginx.type = memory
agent.channels.cl_nginx.capacity = 1000
agent.channels.cl_nginx.transactionCapacity = 100

agent1.sinks.sk_nginx.type = org.apache.flume.sink.kafka.KafkaSink
agent1.sinks.sk_nginx.kafka.topic = fek_topic
agent1.sinks.sk_nginx.kafka.bootstrap.servers = 192.168.2.151:9092,192.168.2.152:9092,192.168.2.153:9092
agent1.sinks.sk_nginx.kafka.flumeBatchSize = 20
agent1.sinks.sk_nginx.kafka.producer.acks = 1
agent1.sinks.sk_nginx.kafka.producer.linger.ms = 1
agent1.sinks.sk_nginx.kafka.producer.compression.type = snappy


agent.sources.sc_nginx.channels = cl_nginx
agent.sinks.sk_nginx.channel = cl_nginx

#Exec Source
agent.sources = sc_nginx
agent.channels = cl_nginx
agent.sinks = sk_nginx

agent.sources.sc_nginx.type = exec
agent.sources.sc_nginx.command = tail -F /usr/local/nginx/logs/access.log

agent.channels.cl_nginx.type = memory
agent.channels.cl_nginx.capacity = 1000
agent.channels.cl_nginx.transactionCapacity = 100

agent1.sinks.sk_nginx.type = org.apache.flume.sink.kafka.KafkaSink
agent1.sinks.sk_nginx.kafka.topic = fek_topic
agent1.sinks.sk_nginx.kafka.bootstrap.servers = 192.168.2.151:9092,192.168.2.152:9092,192.168.2.153:9092
agent1.sinks.sk_nginx.kafka.flumeBatchSize = 20
agent1.sinks.sk_nginx.kafka.producer.acks = 1
agent1.sinks.sk_nginx.kafka.producer.linger.ms = 1
agent1.sinks.sk_nginx.kafka.producer.compression.type = snappy


agent.sources.sc_nginx.channels = cl_nginx
agent.sinks.sk_nginx.channel = cl_nginx

配置文件说明:

配置项名称作用举例
agent1flume节点名称,启动时通过参数命令-name指定
agent1.sources监听的源,可以有多个,空格隔开即可,用于收集数据并发送到channelagent1.sources=s1 s2
agent1.channels临时通道,可以有多个,空格隔开,存放source收集的数据,sink从这里读取数据agent1.channels=c1
agent1.sinks接收器,可以有多个,空格隔开,从channel读取数据,并发送给目标 (比如kafka 或者hdfs或者另一个flume)agent1.sinks=k1
agent.sources.s1.type源的类型,s1是源名称,可以是目录、日志文件、或者监听端口等。 常用的source的类型包括avro、exec、netcat、spooldir和syslog等. 具体请参考官网 http://flume.apache.org/FlumeUserGuide.html#flume-sourcesagent.sources.s1.type=spooldir agent.sources.s2.type=avro
agent1.sources.s1.channels监听数据要写入的channel名称agent1.sources.s1.channels=c1
agent1.channels.c1.type通道的类型,c1为通道名称,此处memory表示为常用的memory-channel, 同时也有其他类型的channel,如JDBC、file-channel、custom-channel等, 具体请参考官网 http://flume.apache.org/FlumeUserGuide.html#flume-channelsagent1.channels.c1.type=memory
agent1.sinks.k1.type接收器类型,k1为接收器名称,logger表示直接写入日志, 常用的包括avro、logger、HDFS、Hbase以及file-roll等, 具体参考官网 http://flume.apache.org/FlumeUserGuide.html#flume-sinksagent1.sinks.k1.type=logger

2. 启动FlumeNG

cd /opt/flume/apache-flume-1.8.0/
mkdir -p /opt/flume/apache-flume-1.8.0/logs
bin/flume-ng agent --conf ./conf/ -f conf/flume-fek.conf -n agent > ./logs/start.log 2>&1 &

启动命令参数说明:

参数作用举例
–conf 或 -c指定配置文件夹,包含flume-env.sh和log4j的配置文件–conf conf
–conf-file 或 -f配置文件地址--conf-file conf/flume.conf
–name 或 -nagent(flume节点)名称--name agent1

Kibana安装

在master.fek上安装Kibana

mkdir -p /opt/kibana/
cd /opt/kibana/
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.3.0-linux-x86_64.tar.gz
tar -zxvf kibana-6.3.0-linux-x86_64.tar.gz
mv kibana-6.3.0-linux-x86_64 kibana-6.3.0

编辑kibana-6.3.0/config/kibana.yml

#配置本机ip  
server.host: "master.fek"
#配置es集群url  
elasticsearch.url: "http://192.168.2.163:9200"

启动

cd kibana-6.3.0//bin

./kibana &

访问:http://192.168.2.163:5061 avatar

© 著作权归作者所有

共有 人打赏支持
张shieppp
粉丝 5
博文 11
码字总数 15647
作品 0
浦东
架构师
私信 提问
日志分析系统--Sevnote

系统笔记 Sevnote 是使用 NodeJS 开发的基于 Elasticsearch 的海量日志分析系统,能通过主机,设备,程序,优先级,关键字来过滤系统日志,更有动态仪表盘能实时的监控日志的产生。支持 Sysl...

帽子戏法
2015/02/28
10.3K
4
Mysql事务和Mysql 日志

事务特性 1、原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做,不可能停滞在中间环节。 2、一致性(Consistency):事务开始前和结束后,数据库的完整性约束没有被破坏...

SibylY
05/08
0
0
MSSQL · 实现分析 · SQL Server实现审计日志的方案探索

摘要 这篇文章介绍四种实现MSSQL Server审计日志功能的方法探索,即解析数据库事务日志、SQL Profiler、SQL Audit以及Extended Event。详细介绍了这四种方法的具体实现,以及通过优缺点的对比...

阿里云RDS-数据库内核组
2017/06/07
0
0
一篇文章让你读懂ELK在CDN质量监控中的价值

一篇文章让你读懂ELK在CDN质量监控中的价值灵活调配ELK,适应大数据场景 数说事实 在开篇之前,先简单的列举下我们线上ELK的真实数据。目前自建的ELK集群主要接入了自建CDN的日志,以及多个应...

Yennis
2016/10/31
151
0
分布式日志存储系统 - LogDevice

LogDevice 是 Facebook 开源的一个可扩展,具备容错性的分布式日志系统。 LogDevice 是专为日志设计的分布式数据存储系统。一般的文件系统会将数据储存为文件,LogDevice 会将数据存储为日志...

匿名
09/13
0
0

没有更多内容

加载失败,请刷新页面

加载更多

CentOS7.4 搭建 ss

一键安装 shadowsocks-go 版 wget –no-check-certificate https://raw.githubusercontent.com/teddysun/shadowsocks_install/master/shadowsocks-go.sh chmod +x shadowsocks-go.sh ./s......

YunOu
19分钟前
2
0
Spark Streaming整合kafka实战

kafka作为一个实时的分布式消息队列,实时的生产和消费消息,这里我们可以利用SparkStreaming实时计算框架实时地读取kafka中的数据然后进行计算。在spark1.3版本后,kafkaUtils里面提供了两个...

hblt-j
20分钟前
1
0
vue组件中的样式属性scoped实例

vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当前组件元素 。接下来通过本文给大家分享vue组件中的样式属性scoped实例详解 **Scoped CSS** Scoped CSS规范是Web组件产...

前端攻城老湿
35分钟前
3
0
ios 面试部分整理

assign weak区别 assign不是有崩溃的风险么 strong和copy 对非容器类可变类型 非容器类不可变 容器类可变容器类不可变 进行深拷贝浅拷贝有什么区别 什么样的对象可以进行拷贝 就是这个NScod...

大魔王周晓辉
36分钟前
2
0
浅谈教你如何掌握Linux系统

linux能做什么?相信绝大数人都有这样的疑问。可以玩吃鸡吗?可以玩lol吗? 如果你是以娱乐的名义来评价linux的可用性,对不起,linux可能不适合你,因为linux是一个工具,他是教你聪明的,不...

Linux就该这么学
36分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部