ELK核心组成简介![]
1.2、核心组成
ELK由Elasticsearch、Logstash和Kibana三部分组件组成;
Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动分片,索引副本机制,restful风格接口,多数据源,自动搜索负载等。
Logstash是一个完全开源的工具,它可以对你的日志进行收集、分析,并将其存储供以后使用
kibana 是一个开源和免费的工具,它可以为 Logstash 和 ElasticSearch 提供的日志分析友好的 Web 界面,可以帮助您汇总、分析和搜索重要数据日志。
ELK帮助我们解决了什么?!
不使用日志系统需待解决的痛点:
大量不同种类的日志成为了运维人员的负担,不方便管理;
单个日志文件巨大,无法使用常用的文本工具分析,检索困难;
日志分布在多台不同的服务器上,业务一旦出现故障,需要一台台查看日志。
线上日志出现报错无法第一时间知悉并处理。
必须给核心开发人员开通线上服务器账号,对生产环境风险上升。
运维对线上环境不可控。
不能满足信息安全等级保护三级对日志存储的要求。
不能满足日志可视化和大数据量分析要求。
系统优化
cat /etc/security/limits.conf
注:soft 指的是当前系统生效的设置值。hard 表明系统中所能设定的最大值• nofile 65536 #配置root用户生效参数#
###修改文件描述符大小(程序里面需要打开多个文件调整参数)####
deploy hard nofile 165536 #单个用户可用的最大进程数量(硬限制)
deploy soft nofile 165536 #单个用户可用的最大进程数量(软限制) #
######锁定内存,拒绝 swapping####
deploy soft memlock unlimited
deploy hard memlock unlimited
deploy soft nproc 165536 #可打开的文件描述符的最大数(软限制)#
deploy hard nproc 165536 #可打开的文件描述符的最大数(硬限制)ES配置文件说明
elasticsearch配置文件说明
grep -v ^# config/elasticsearch.yml
cluster.name: AB #配置es的集群名称
node.name: node-1 #配置节点名
node.master: true #是否可以成为master
path.data: /app/es/data #设置索引数据的存储路径
path.logs: /app/es/logs #设置日志文件的存储路径
bootstrap.memory_lock: true #设置为true来锁住内存。因为如不锁定内存,当jvm开始swapping时es的效率会降低
bootstrap.system_call_filter: false
network.host: 10.10.40.22 #指定主机地址
http.port: 9200 #设置对外服务的http端口
discovery.zen.ping.unicast.hosts: ["10.10.40.22", "10.10.40.23"] #集群中的主节点的初始列表
discovery.zen.minimum_master_nodes: 2启动filebeat收集haproxy访问日志
前端web服务器日志收集也可用filebeat
[root@testweb ~]# grep -v "^#" /app/filebeat-5.3.1-linux-x86_64/filebeat.yml
filebeat.prospectors:• input_type: log
Paths that should be crawled and fetched. Glob based paths.
paths:• /var/log/haproxy/haproxy.log
document_type: haproxyacclog• input_type: log
paths:• /var/log/dmesg
document_type: dmesg
output.kafka:
#enabled: true
hosts: ["10.10.40.25:9092", "10.10.40.22:9092"]
topics:
• topic: '%{[type]}'
use_type: true
partition.round_robin:
reachable_only: false
required_acks: 1
compression: gzip
max_message_bytes: 1000000
启动方式:
nohup /app/filebeat-5.3.1-linux-x86_64/filebeat -e -c filebeat.yml > /dev/null 2>&1 &
Kafka配置文件解读
broker.id=1 #id,必须是数字 必须是唯一值#
port=9092 #broker监听的端口#
host.name=10.10.40.22 #唯一值,此处填服务器IP
num.network.threads=3 #接收消息的线程数,会将接收到的消息放到内存中,然后再从内存中写入磁盘#
num.io.threads=8 #消息从内存中写入磁盘是时候使用的线程数量,用来处理磁盘IO的线程数量#
socket.send.buffer.bytes=102400 #发送套接字的缓冲区大小
socket.receive.buffer.bytes=102400 #接受套接字的缓冲区大小
socket.request.max.bytes=104857600 #请求套接字的缓冲区大小
log.dirs=/app/kafka/logs #定义log目录,启动时自动会创建#
num.partitions=16 #需要配置较大、分片影响读写速度#
num.recovery.threads.per.data.dir=1 #segment文件默认会被保留7天的时间,超时的话就会被清理,那么清理这件事情就需要有一些线程来做。这里就是用来设置恢复和清理data下数据的线程数量#
log.retention.hours=168 # segment文件保留的最长时间,默认保留7天(168小时)#
log.segment.bytes=1073741824 #日志文件中每个segment的大小,默认为1G
log.retention.check.interval.ms=300000 #上面的参数设置了每一个segment文件的大小是1G,那么就需要有一个东西去定期检查segment文件有没有达到1G,多长时间去检查一次,就需要设置一个周期性检查文件大小的时间(单位是毫秒)。
zookeeper.connect=10.10.40.22:2181,10.10.40.25:2181 #zookpeeper连接的ip和端口#
zookeeper.connection.timeout.ms=6000 #zookpeeper连接超时设置#
kafka查看所有topic
/app/kafka/bin/kafka-topics.sh --list --zookeeper 10.10.40.25:2181,10.10.40.22:2181 #查看集群中所有的主题topic名
Elastalert介绍**
Elastalert是Yelp公司用python2写的一个报警框架(目前支持python2.7,不支持3.x),github地址为 https://github.com/Yelp/elastalertElastalert配置文件
[root@ceshiELK1 elastalert]# grep -v "^#" example_rules/example_frequency.yaml
es_host: 10.10.40.23
es_port: 9200
name: server is error message
type: frequency
index: w0-apache-acclog-*
num_events: 1
timeframe:
hours: 4
filter:
query:
query_string:
query: "ERROR"
smtp_host: smtp.qiye.sina.com
smtp_port: 25
smtp_auth_file: smtp_auth_file.yaml
email_reply_to: monitor@sina.com
from_addr: monitor@sina.com
alert:
"email"
email:
"782118373@qq.com"
配置kibana权限细分
10.10.40.22
10.10.40.23
两台机器安装ssl
cd /app/elasticsearch/bin/
./plugin install -b com.floragunn/search-guard-2/2.4.4.10
./plugin install -b com.floragunn/search-guard-ssl/2.4.4.19配置文件定义证书信息
[deploy@test-apache example-pki-scripts]$ vim /app/elasticsearch/config/elasticsearch.yml
#配置elasticsearch 各结点基于tls加密通讯#
searchguard.ssl.transport.keystore_filepath: node-1-keystore.jks
searchguard.ssl.transport.keystore_password: changeit
searchguard.ssl.transport.truststore_filepath: truststore.jks
searchguard.ssl.transport.truststore_password: changeit
searchguard.ssl.transport.enforce_hostname_verification: false
##初始化 Search Guard 索引,配置帐号#配置一定要和签的客户端证书一致
searchguard.authcz.admin_dn:• "CN=application, OU=client, O=client, L=Test, C=DE"
##配置REST-API 基于https连接##
searchguard.ssl.http.enabled: true
searchguard.ssl.http.keystore_filepath: node-1-keystore.jks
searchguard.ssl.http.keystore_password: changeit
searchguard.ssl.http.truststore_filepath: truststore.jks
searchguard.ssl.http.truststore_password: changeit重新加载search-guard配置文件
[deploy@test-apache search-guard-2]$ tools/sgadmin.sh -ts /app/es/config/truststore.jks -tspass changeit -ks sgconfig/AB-keystore.jks -kspass changeit -cd sgconfig/ -icl -nhnv -h 10.10.40.23通过search-guard的hash工具将密码加密
则先用plugins/search-guard-2/tools/hash.sh生成hash字符串,生成密码:
先修改权限。再生成密码。
[deploy@ceshiELK2 search-guard-2]$ chmod +x tools/*
[deploy@ceshiELK2 search-guard-2]$ ./tools/hash.sh -p fdajkfdslfdsa
注:密码不能用$这种特殊符号
$2a$12$k7uQePTOpDvTfZdKBlNjnOVDYawe/MRMGHP1CIb7qDg6jRTtpsfWmsearch-guard中的用户权限管理
1、sg_config.yml:主配置文件不需要做改动。
2、sg_internal_users.yml:本地用户文件,定义用户密码以及对应的权限。
3、sg_roles.yml:权限配置文件
4、sg_roles_mapping.yml:定义用户的映射关系
5、sg_action_groups.yml:定义权限Logstash使用https加密传输数据到ES
通过kafka将数据传送到es
[deploy@kafka1 logs]$ cat /app/logstash/conf/nginx2-access.conf
input {
kafka {
zk_connect => "10.10.40.25:2181,10.10.40.22:2181" #消费者们
topic_id => "nginx2-accesslog"
codec => "json"
consumer_threads => 1
type => "nginx2-accesslog"
}
}
output {
if [type] == "nginx2-accesslog" {
elasticsearch {
hosts => ["10.10.40.22:9200","10.10.40.23:9200"]
codec => "json"
user => "admin"
password => "abc1g%1234"
ssl => true
ssl_certificate_verification => false
truststore => "/app/logstash/truststore.jks"
truststore_password => changeit
index => "nginx2-accesslog-%{+YYYY.MM.dd}"
}
}
}
最终实现效果
Kibana无权限项目将无法打开
ELK知识点总结
转载于:https://blog.51cto.com/chengqi/2065328