设为首页 收藏本站
查看: 805|回复: 0

[经验分享] ELK部署实施

[复制链接]

尚未签到

发表于 2019-1-28 08:54:09 | 显示全部楼层 |阅读模式
  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/elastalert
  Elastalert配置文件
[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/MRMGHP1CIb7qDg6jRTtpsfWm
  search-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知识点总结





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-668502-1-1.html 上篇帖子: 部署 elk 日志系统 elasticsearch、logstash、 kibana 下篇帖子: 关于ELK
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表