Netflix / Turbine

SSE Stream Aggregator
Apache License 2.0
836 stars 255 forks source link

Missing eureka integration? #15

Closed OskarKjellin closed 11 years ago

OskarKjellin commented 11 years ago

According to the wiki, turbine uses eureka to find what instances to monitor. However, I cannot find any implementation of this in the source code. I could not find any dependency on eureka-core either...

Am I missing something or is the documentation incorrect and this part not yet open sourced? There should be no problem just implementing the eureka-plugin. Just wanted to check before as the documentation states otherwise (see below).

"Turbine automatically discovers and connects to server instances using Netflix's Eureka service"

/Oskar Kjellin

cfregly commented 11 years ago

+1 for this as I was under the same assumption, but can't seem to find the eureka impl.

@benjchristensen - any advice? should one of us start writing this eureka-plugin?

thanks!

-chris

benjchristensen commented 11 years ago

@opuneet Can you provide guidance on this please?

opuneet commented 11 years ago

Yes, we have been using the Netflix Eureka service to discover instances in the cloud. The impl class was being used internally only, I haven't released it yet. I'll release this soon, stay tuned.

Thanks -Puneet

opuneet commented 11 years ago

I fixed the docs to be more clear. I'll fix them back when I check in the eureka impl.

Thanks

cfregly commented 11 years ago

awesome!

is this something that will be released soon? or should I switch strategies in the short term?

context: I'm speaking next week at Velocity and want to have this integrated into my Flux Capacitor project for demo purposes.

thanks!

-Chris

On Tuesday, June 11, 2013, opuneet wrote:

I fixed the docs to be more clear. I'll fix them back when I check in the eureka impl.

Thanks

— Reply to this email directly or view it on GitHubhttps://github.com/Netflix/Turbine/issues/15#issuecomment-19287618 .

opuneet commented 11 years ago

I can have this commited by eod today. If that doesn't happen, I'll explicitly post back asking you to switch strategies. Thanks!

cfregly commented 11 years ago

awesome awesome.

looking fw to it!

On Tuesday, June 11, 2013, opuneet wrote:

I can have this commited by eod today. If that doesn't happen, I'll explicitly post back asking you to switch strategies. Thanks!

— Reply to this email directly or view it on GitHubhttps://github.com/Netflix/Turbine/issues/15#issuecomment-19293263 .

opuneet commented 11 years ago

Just committed the change. https://github.com/Netflix/Turbine/blob/master/turbine-contrib/src/main/java/com/netflix/turbine/discovery/EurekaInstanceDiscovery.java

I've added this to a new turbine-contrib module, but haven't had the chance to build this as a jar and release to maven et all just as yet.

cfregly commented 11 years ago

thanks for the quick response. I'll give this a try later today and let know if I have any issues.

thanks again!

On Tuesday, June 11, 2013, opuneet wrote:

Just committed the change.

https://github.com/Netflix/Turbine/blob/master/turbine-contrib/src/main/java/com/netflix/turbine/discovery/EurekaInstanceDiscovery.java

I've added this to a new turbine-contrib module, but haven't had the chance to build this as a jar and release to maven et all just as yet.

— Reply to this email directly or view it on GitHubhttps://github.com/Netflix/Turbine/issues/15#issuecomment-19296798 .

cfregly commented 11 years ago

ok, so i gave the standalone webapp a try last night and - after adding some config properties files, i'm still seeing a null pointer at line 80 in EurekaInstanceDiscovery:

    Application app = DiscoveryManager.getInstance().getDiscoveryClient().getApplication(appName);

my hunch is that the DiscoveryClient is not being initialized properly.

the 2 config files i added to the classpath are as follows:

config.properties InstanceDiscovery.impl=com.netflix.turbine.discovery.EurekaInstanceDiscovery turbine.appConfig=middletier,edge eureka.serviceUrl.default=http://54.235.120.9/eureka/v2/

eureka-client.properties eureka.serviceUrl.default=http://54.235.120.9/eureka/v2/

this got me further, but i'm still seeing the NPE at the line above.

my next step is to explicitly initialize the DiscoveryClient similar to how it's done in Karyon (as this is what i use for my other webapps).

in summary - this isn't quite so easy out of the box. any advice on how to proceed would be appreciated, otherwise i'll just keep poking around. i might end up just embedding this into one of my existing webapps that already has DiscoveryClient initialized, but i'd prefer this to be standalone. so the other thought it so create a new version of turbine-web (or modify the existing one) and use Karyon to handle the Discovery initialization.

thoughts?

-chris

OskarKjellin commented 11 years ago

@cfregly I am seeing the same thing. I am looking into modifying the code to make it work. The discovery client isn't being initialized at all..

I'll give an update when I have it working

OskarKjellin commented 11 years ago

@cfregly I got a list of instances now for my app. All I needed to add was: static { DiscoveryManager.getInstance().initComponent(new MyDataCenterInstanceConfig(), new DefaultEurekaClientConfig()); }

However, the turbine stream is empty, just some meta. I keep getting some exceptions in the log tho java.lang.NoClassDefFoundError: com/sun/jersey/api/client/RequestWriter$RequestEntityWriterImpl

opuneet commented 11 years ago

You guys should not be getting an NPE, you need a more helpful error message. Will fix that.

And yes, we run our turbine webapp in the nextflix env using karyon, which sets up the plumbing for the eureka-client. @cfregly you will have to get that working on your side and it looks like @OskarKjellin just did that.

OskarKjellin commented 11 years ago

Seems like it had to be in the constructor. Otherwise it is working other than I am getting a null ASG for the servers which makes them not appear in the list. Have to dig deeper into that

cfregly commented 11 years ago

@OskarKjellin - i added the snippet of code that you suggested and instances are being discovered. however, my turbine stream appears broken, as well. i don't see your specific error, Oskar, but i just don't see any relevant data.

i did have an interesting situation where - because i'm using the same tomcat server to host eureka and turbine-web, i had a race condition where eureka had not yet fully started/settled down while turbine was starting - this caused turbine to timeout and report no instances for a particular app. i got around this, but it's worth noting in case you're in a similar situation.

@opuneet - i know it's hard to debug this stuff remotely, so lemme spend some more time debugging. although any suggestions on what might be wrong would be appreciated. i'm available to swing by the office tomorrow if that makes things easier, btw.

the following command:

curl "http://admin.fluxcapacitor.com:8080/turbine/turbine.stream?cluster=default"

is producting the following output:

data: {"timestamp":1371078550594,"name":"meta","reportingHostsLast10Seconds":0,"type":"meta"}

and not much else.

i feel like i'm missing something critical, here.

cfregly commented 11 years ago

also, my hosts appear UP in status: http://admin.fluxcapacitor.com/eureka/v2/apps/

opuneet commented 11 years ago

@cfregly yeah we could sit down together in the courtyard and make this work. However, I'm hoping that I can help you remotely as well, coz others may have similar problems and may not have the opportunity to swing by.

Here is where I would look next. Turbine will open connections to each of your servers. You need to look at that url path that it is using. Try curling that same path to make sure that when Turbine connects it will get the data it needs.

One more important thing to note. When you app servers are discovered through Eureka using an "app" list (which is a eureka concept), Turbine needs to infer the cluster name from that. Looking at your curl above you are using the cluster as "default" . This is a sore point in Turbine, but you need to ensure that the cluster name "default" is reflected in the InstanceInfo information which is being set by the EurekaInstanceDiscovery class. That class uses the amazon asg name as the cluster name for lack of a better alternative.

Now if the asg name is "my-amazon-asg", then the cluster name will be that. If this is true, then Turbine needs to know that when starting up the cluster aggregators.

Let me know if this is the case, and if it is, then I can help you fix that.

It's in the wiki, there is a property that gives Turbine the list of clusters. If it doesn't find one, it uses the name default. So make sure that either your asg name is "default" or Turbine has the right set of cluster names explicitly configured.

Apologies for the inconvenience here, but we are dealing with 2 separate systems (Turbine and Eureka) and then are configured separately, which may be the reason for the problem here.

Hope this helps.

cfregly commented 11 years ago

this helps a lot, yes.

lemme look into this deeper. my asg name is definitely not, "default," so I suspect that's part of the issue.

I will also figure out the exact URL that turbine is connecting to. this will be some form of /hystrix.stream, I assume. I know turbine gives me a way to configure that URL, so I'll reverse-engineer and fix it.

thanks!

On Jun 12, 2013, at 4:36 PM, opuneet notifications@github.com wrote:

@cfregly yeah we could sit down together in the courtyard and make this work. However, I'm hoping that I can help you remotely as well, coz others may have similar problems and may not have the opportunity to swing by.

Here is where I would look next. Turbine will open connections to each of your servers. You need to look at that url path that it is using. Try curling that same path to make sure that when Turbine connects it will get the data it needs.

One more important thing to note. When you app servers are discovered through Eureka using an "app" list (which is a eureka concept), Turbine needs to infer the cluster name from that. Looking at your curl above you are using the cluster as "default" . This is a sore point in Turbine, but you need to ensure that the cluster name "default" is reflected in the InstanceInfo information which is being set by the EurekaInstanceDiscovery class. That class uses the amazon asg name as the cluster name for lack of a better alternative.

Now if the asg name is "my-amazon-asg", then the cluster name will be that. If this is true, then Turbine needs to know that when starting up the cluster aggregators.

Let me know if this is the case, and if it is, then I can help you fix that.

It's in the wiki, there is a property that gives Turbine the list of clusters. If it doesn't find one, it uses the name default. So make sure that either your asg name is "default" or Turbine has the right set of cluster names explicitly configured.

Apologies for the inconvenience here, but we are dealing with 2 separate systems (Turbine and Eureka) and then are configured separately, which may be the reason for the problem here.

Hope this helps.

— Reply to this email directly or view it on GitHub.

OskarKjellin commented 11 years ago

@cfregly @opuneet I got it almost working using by setting my asgname to default and by adding this property: turbine.instanceUrlSuffix.default=/hystrix.stream

However, it does not really seem pick up the right port. It tries to connect on port 80 while my apps are configure to use port 8080 in euereka. And for what I can see, the code in the eureka implementation does not get the port from eureka, it just ignores it. Need to look into this more

OskarKjellin commented 11 years ago

Changed the code to: String hostname = iInfo.getHostName() + ":" + iInfo.getPort();

And now everything works!

cfregly commented 11 years ago

oh oh

On Jun 13, 2013, at 2:31 AM, OskarKjellin notifications@github.com wrote:

Changed the code to: String hostname = iInfo.getHostName() + ":" + iInfo.getPort();

And now everything works!

— Reply to this email directly or view it on GitHub.

opuneet commented 11 years ago

@OskarKjellin cool, good to know that it's working.

Here is the code that Turbine uses to connect to the host public static InstanceUrlClosure ClusterConfigBasedUrlClosure = new InstanceUrlClosure() { private final DynamicStringProperty defaultUrlClosureConfig = DynamicPropertyFactory.getInstance().getStringProperty("turbine.instanceUrlSuffix", null); @Override public String getUrlPath(Instance host) { ......... String url = defaultUrlClosureConfig.get(); ............ return "http://" + host.getHostname() + url; } };

Notice the last line. Your url config can dictate exactly what port you want to connect to.

If you host connection url is something like

http://myhostname:7080/hystrix.stream

Then you can add config such as turbine.instanceUrlSuffix = :7080/hystrix.stream

If you have different connections for different clusters then you can configure like this

turbine.instanceUrlSuffix.myFirstCluster = :7080/somePath/hystrix.stream turbine.instanceUrlSuffix.mySecondCluster = :7080/some/other/path/hystrix.stream

Please note the starting colon and port, that is necessary since Turbine just tacks on whatever you configure after "http://hostname"

Hope this helps

opuneet commented 11 years ago

@OskarKjellin and @cfregly I hope this is going well now? In light of this discussion, I've updated the wiki with a lot of helpful information (well hopefully).

Please see https://github.com/Netflix/Turbine/wiki/Getting-Started https://github.com/Netflix/Turbine/wiki/Configuration

And this should cover most of what we have discussed here, with neat and simple examples.

Please give me feedback on the instructions, I'd love to make it easier for someone to get up and running with Turbine.

OskarKjellin commented 11 years ago

@opuneet

All is working well. Haven't had the time to deploy it and connect the hystrix dashboard yet but the stream seems fine.

Yeah, I could just set the port for the suffix. But I don't like the double configuration. Eureka already knows my port so it could just use that one. But I see where you are going at.

Read the documentation and everything seems fine. Makes a lot more sense now and would probably be easy to setup with no prior knowledge.

One thing that is confusing is that in the Getting Started part, you write:

"Note that when Turbine starts, it requires your Turbine enabled servers to be up and running. If they aren't it will just try to re-connect to your servers and you will not get any data."

Should it not be "Hystrix enabled servers" as the servers it connect to is not running any turbine stuff per se.

opuneet commented 11 years ago

@OskarKjellin yes it should say Hystrix, just corrected that. Thanks! :)

cfregly commented 11 years ago

update: i've corrected the cluster/ASG configs. i also had a security group issue that would have prevented my turbine instance from communicating with each individual EC2 instance discovered by eureka. the security group previously only allowed traffic from the ELB on port 80. i opened this up to the public.

however, i'm still having an issue getting everything working together. i see data coming back from each individual hystrix.stream (curl "http://ec2-23-20-129-164.compute-1.amazonaws.com/hystrix.stream"), but the aggregated turbine stream for this cluster/asg isn't showing anything besides the ping/meta stuff (curl "http://admin.fluxcapacitor.com:8080/turbine/turbine.stream?cluster=awseb-e-jibiqnyrij-stack-AWSEBAutoScalingGroup-1UQ5NEX28Q5G")

in looking through the turbine logs, i see the following:

2013-06-14 04:21:21 INFO com.netflix.turbine.discovery.EurekaInstanceDiscovery:52 [EurekaInstanceDiscovery] [getInstanceList]: Fetching instance list for apps: [middletier, edge] 2013-06-14 04:21:21 INFO com.netflix.turbine.discovery.EurekaInstanceDiscovery:79 [EurekaInstanceDiscovery] [getInstancesForApp]: Fetching instances for app: middletier 2013-06-14 04:21:21 INFO com.netflix.turbine.discovery.EurekaInstanceDiscovery:84 [EurekaInstanceDiscovery] [getInstancesForApp]: Received instance list for app: middletier = 4 2013-06-14 04:21:21 INFO com.netflix.turbine.discovery.EurekaInstanceDiscovery:79 [EurekaInstanceDiscovery] [getInstancesForApp]: Fetching instances for app: edge 2013-06-14 04:21:21 INFO com.netflix.turbine.discovery.EurekaInstanceDiscovery:84 [EurekaInstanceDiscovery] [getInstancesForApp]: Received instance list for app: edge = 4 2013-06-14 04:21:21 INFO com.netflix.turbine.discovery.InstanceObservable$1:260 [InstanceObservable$1] [run]: Rertieved hosts from InstanceDiscovery: 0 2013-06-14 04:21:21 INFO com.netflix.turbine.discovery.InstanceObservable$1:272 [InstanceObservable$1] [run]: Found hosts that have been previously terminated: 0 2013-06-14 04:21:21 INFO com.netflix.turbine.discovery.InstanceObservable$1:289 [InstanceObservable$1] [run]: Hosts up:0, hosts down: 0

of particular note above is the following: "Rertieved hosts from InstanceDiscovery: 0". any idea why that would be the case? even though it says it found 4 instances for the edge app immediately before: "Received instance list for app: edge = 4"?

below is my updated config.properties, btw.

a few comments/questions about the config.properties: 1) i'm currently exploring AWS's Elastic Beanstalk mechanism for my deployments - hence, the wonky ASG names. 2) i chose to explicitly set the turbine.instanceUrlSuffix. on purpose. i realize i can use a global setting, but i like being explicit to avoid default-surprise syndrome. :) 3) it's not clear to me where to put the "eureka.serviceUrl.default" property. i have it in 2 places right now: eureka-client.properties and here in config.properties. @opuneet: perhaps you can clarify in the EurekaInstanceDiscovery impl docs? 4) you may want to mention the issue that i had where i was hosting turbine and eureka on the same server. basically, you need to wait for the eureka webapp to settle down (a few mins after startup) before deploying turbine in the same servlet container.


#################################
# turbine instance discovery  impl
#################################
InstanceDiscovery.impl=com.netflix.turbine.discovery.EurekaInstanceDiscovery
#################################
# turbine clusters (AWS ASGs)
#################################
# edge ASG, middletier ASG
turbine.aggregator.clusterConfig=awseb-e-jibiqnyrij-stack-AWSEBAutoScalingGroup-1UQ5NEX28Q5G,awseb-e-vi289zxtmi-stack-AWSEBAutoScalingGroup-FYRJHFXGAL62
#################################
#################################
# turbine suffix
#################################
# edge
turbine.instanceUrlSuffix.awseb-e-jibiqnyrij-stack-AWSEBAutoScalingGroup-1UQ5NEX28Q5G=:80/hystrix.stream
# middletier
turbine.instanceUrlSuffix.awseb-e-vi289zxtmi-stack-AWSEBAutoScalingGroup-FYRJHFXGAL62=:80/hystrix.stream
#################################
#################################
# turbine apps
#################################
turbine.appConfig=middletier,edge
#################################
# eureka server url
#################################
eureka.serviceUrl.default=http://admin.fluxcapacitor.com/eureka/v2/
opuneet commented 11 years ago

@cfregly I'm not sure why you are facing this problem, given your config.

The problem is the line that you point out Rertieved hosts from InstanceDiscovery: 0

Here is the code that printed the log statements that you saw

        logger.info("Fetching instances for app: " + appName);
        Application app = DiscoveryManager.getInstance().getDiscoveryClient().getApplication(appName);
        List<InstanceInfo> instancesForApp = app.getInstances();

        if (instancesForApp != null) {
            logger.info("Received instance list for app: " + appName + " = " + instancesForApp.size());
            for (InstanceInfo iInfo : instancesForApp) {
                Instance instance = marshallInstanceInfo(iInfo);
                if (instance != null) {
                    instances.add(instance);
                }
            }
        }

        return instances;

The marshallInstanceInfo func is returning a null obj

Instance instance = marshallInstanceInfo(iInfo);

hence you see the line Retrieved instances from discovery: 0

Here is the exact code that processes info from the eureka client

  protected Instance marshallInstanceInfo(InstanceInfo iInfo) {

        String hostname = iInfo.getHostName();
        String cluster = getClusterName(iInfo);
        Boolean status = parseInstanceStatus(iInfo.getStatus());

        if (hostname != null && cluster != null && status != null) {
            Instance instance = new Instance(hostname, cluster, status);
            ........

            return instance;
        } else {
            return null;
        }
    }

Note the line

 if (hostname != null && cluster != null && status != null) {

You will have to debug what is in InstanceInfo I bet that one of these properties is not being parsed properly and hence this is Instance obj is never created and

At this point, this is going to involve adding more debug info to the EurekaInstanceDiscovery class. Apologies for the inconvenience, and I'm at work tomorrow in case you want to swing by.

Hope this helps.

cfregly commented 11 years ago

ok, i'm gonna get this setup on my laptop and debug it locally tonight. thanks for pointing me in the right direction.

cfregly commented 11 years ago

the ASG name is, indeed, null. and looking at the eureka XML, i don't see ASG listed:

http://admin.fluxcapacitor.com/eureka/v2/apps

hmm. lemme poke around the eureka code and configuration a bit.

opuneet commented 11 years ago

Yes that seems like the problem. BTW, I'm not sure what your timeline is, but as a quick fix you can provide your own InstanceDiscoveryImpl class, that provides the list of instances. You can put the instance names in config of a file as well. But all this will be static of course.

cfregly commented 11 years ago

ok, i found one way of working around this.

my apps need the following in their eureka-client.properties:


#############################################
# Eureka Configuration 
#############################################
eureka.asgName=awseb-e-jibiqnyrij-stack-AWSEBAutoScalingGroup-1UQ5NEX28Q5G
#############################################

basically, each app's config has to know the ASG that it's going to live in. seems a bit odd to me, so perhaps i'm missing the cleaner way of doing this. i feel like eureka should be able to auto-discover this info using the AWS APIs.

here's the relevant info from the Eureka docs: https://github.com/Netflix/eureka/wiki/Configuring-Eureka-in-AWS-Cloud

doing more testing with the end-to-end turbine/hystrix integration...

OskarKjellin commented 11 years ago

@cfregly I was under the same assumption. Thought that the ASG was gotten using the ec2-tools but found that it was null when debugging. A question for the eureka-team

opuneet commented 11 years ago

@karthik-vn can you shed some light on this?

I have 2 users here experiencing similar issues. The eureka-client is not fetching the asg information from the Application object

cfregly commented 11 years ago

@karthik-vn: my latest issue (after hard-coding the asg in the config) is that region is coming as "default" while querying "autoscaling." + region + ".amazonaws.com"

the autoscaling.default.amazonaws.com endpoint doesn't exist, obviously. i tried hard-coding the eureka.region in the config, but that didnt seem to work. is there another region property I need to set?

I spent quite a bit of time on this until i decided to start writing an AwsInstanceDiscovery impl that goes directly to the AWS API to query the instances for the already-hardcoded ASG.

my issue there was that I can't seem to get the public ip from the AWS API - which I remember always being an issue.

anyone know a way to get the public ip? I can get the instanceId from the AWS API, but not much more. I haven't googled it extensively, but initial research didnt look promising.

On Jun 14, 2013, at 9:39 AM, opuneet notifications@github.com wrote:

@karthik-vn can you shed some light on this?

I have 2 users here experiencing similar issues. The eureka-client is not fetching the asg information from the Application object

— Reply to this email directly or view it on GitHub.

OskarKjellin commented 11 years ago

@cfregly Can you not just use the describeInstances? http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/ec2/model/Instance.html

That contains the public ip and dns

cfregly commented 11 years ago

oh, interesting.

here is the Instance class I was working with last night using the ASG query API:

http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/autoscaling/model/Instance.html

diff package and doesn't contain the public ip/hostname.

I can work with this, however. see - this is what happens when you shift direction at 3am!

lemme play with this a bit more while we wait for @karthik-vn to reply.

thanks, Oskar!

On Jun 14, 2013, at 2:24 PM, OskarKjellin notifications@github.com wrote:

@cfregly Can you not just use the describeInstances? http://docs.aws.amazon.com/AWSJavaSDK/latest/javadoc/com/amazonaws/services/ec2/model/Instance.html

That contains the public ip and dns

— Reply to this email directly or view it on GitHub.

cfregly commented 11 years ago

ok, bad news and good news. bad news is that i can't figure out what's going on with the eureka-turbine integration. i'm missing something.

the good news is that i wrote an AwsInstanceDiscovery impl that goes uses the AWS API to determine the instance list. my impl currently uses the same turbine.aggregator.clusterConfig property as these are the same in this case.

here's the link:

http://admin.fluxcapacitor.com:8080/hystrix-dashboard/monitor/monitor.html?stream=http%3A%2F%2Fturbine.fluxcapacitor.com%2Fturbine.stream%3Fcluster%3Dawseb-e-jibiqnyrij-stack-AWSEBAutoScalingGroup-1UQ5NEX28Q5G

you can hit the following URL to generate some traffic: http://edge.fluxcapacitor.com/service/edge/v1/logs/1234

i'll tighten up the code and issue a pull request tomorrow or sunday. gotta head out for the night.

thanks for your help, guys!

-chris

OskarKjellin commented 11 years ago

@cfregly Cool, glad to see that you have it working! Seems odd that you had to go such extremes to make it work.

karthik-vn commented 11 years ago

Chris,

eureka.region is the property eureka looks for to find the region. We do not query AWS APIs because of the number of instances and the problems that this could create. Instead most of this information is set as environment variables by launch configs and other things and then it is fed into eureka.

Thanks.

On Fri, Jun 14, 2013 at 1:46 PM, Chris Fregly notifications@github.comwrote:

@karthik-vn: my latest issue (after hard-coding the asg in the config) is that region is coming as "default" while querying "autoscaling." + region + ".amazonaws.com"

the autoscaling.default.amazonaws.com endpoint doesn't exist, obviously. i tried hard-coding the eureka.region in the config, but that didnt seem to work. is there another region property I need to set?

I spent quite a bit of time on this until i decided to start writing an AwsInstanceDiscovery impl that goes directly to the AWS API to query the instances for the already-hardcoded ASG.

my issue there was that I can't seem to get the public ip from the AWS API

  • which I remember always being an issue.

anyone know a way to get the public ip? I can get the instanceId from the AWS API, but not much more. I haven't googled it extensively, but initial research didnt look promising.

On Jun 14, 2013, at 9:39 AM, opuneet notifications@github.com wrote:

@karthik-vn can you shed some light on this?

I have 2 users here experiencing similar issues. The eureka-client is not fetching the asg information from the Application object

— Reply to this email directly or view it on GitHub.

— Reply to this email directly or view it on GitHubhttps://github.com/Netflix/Turbine/issues/15#issuecomment-19480687 .

cfregly commented 11 years ago

@karthik-vn: makes sense why you don't query the AWS API to auto-discover the ASG. i knew i was missing something there.

i'm still having an issue w/ the "default" region - even though i set eureka.region. i'll keep looking into this in the background.

@OskarKjellin: have you successfully configured turbine end-to-end using the EurekaInstanceDiscovery impl? I'm gonna stick with the AwsInstanceDiscovery in the short term, but curious if you were able to get it working.

OskarKjellin commented 11 years ago

@cfregly Well, I didn't connect my hystrix dashboard to it but I did get the messages from hystrix.stream into by turbine.stream. So I could see the circuit breaker names etc that I had configured for my instances and turbine wouldn't know them if it didn't work.

I added my config for eureka, my config for the apps and then the instanceUrlSuffix into the config. I modified the code to use the port as I wrote above so I didn't have to hard code the port that it was running on twice. For my eureka region I have (on both the turbine server and my app servers):

eureka.region=eu-west-1

cfregly commented 11 years ago

good news: i scrubbed my environment, split hystrix and eureka into separate environments (ELB, ASG) and the turbine eureka implementation is now working properly. still not exactly sure what the issue was, but moving on.

i still plan to commit the AwsInstanceDiscovery impl for those that are interested.

thanks for your help, everyone!

opuneet commented 11 years ago

@cfregly
Good to see that this worked out, after all the effort. Please feel free to edit the wiki to provide more examples etc so that it is easier for others to work with the Netflix OSS components.

I'm closing this issue assuming that this is working for you.

opuneet commented 11 years ago

closing